首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TXMLDocument的XSLT转换

使用TXMLDocument的XSLT转换
EN

Stack Overflow用户
提问于 2018-01-23 20:10:20
回答 1查看 1.3K关注 0票数 1

我尝试使用TXMLDocument进行XSLT转换,发现(对我来说)无法解释的行为-- TXMLDocument.transformNode不处理'/‘模式(与根节点https://msdn.microsoft.com/en-us/library/ms256113(v=vs.85).aspx匹配)。

XML:

代码语言:javascript
复制
<notelist>
  <note>NoteText</note>
</notelist>

Xslt:

代码语言:javascript
复制
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml"  indent="yes" encoding="utf-8" />

  <xsl:template match="/">
    <TransformedNoteList>
      <xsl:apply-templates/>  
    </TransformedNoteList>
  </xsl:template>

  <xsl:template match="text()" /> 
</xsl:stylesheet>

使用TXMLDocument Delphi代码:

代码语言:javascript
复制
var
  XML: IXMLDocument;
  XSL: IXMLDocument;
  Output: XmlDomString;
begin
  ResultMemo.Clear;

  XML := LoadXMLData(XMLMemo.Text);
  XSL := LoadXMLData(XsltMemo.Text);

  XML.DocumentElement.TransformNode(XSL.DocumentElement, Output);

  ResultMemo.Text := Output;

我预计会有这样的结果:

代码语言:javascript
复制
<?xml version="1.0"?>
<TransformedNoteList></TransformedNoteList>

但得到的xml文件为空。

我试图通过使用IXslProcessor来重现这种行为,并且一切正常。谁能给我解释一下什么是使用TXMLDocument进行转换,因为as在不通过IXslProccessor工作时被理解为?

使用IXSLProcessor:

代码语言:javascript
复制
var
  XMLDoc, XSLStylesheet: IXMLDOMDocument;
  XSLProcessor: IXSLProcessor;
  XSLTemplate: IXSLTemplate;
begin
  ResultMemo.Clear;

  XMLDoc := CoDOMDocument60.Create;
  XMLDoc.LoadXML(XMLMemo.Text);

  XSLStylesheet := CoDOMDocument60.Create;
  XSLStylesheet.LoadXML(XsltMemo.Text);

  XSLTemplate := CoXSLTemplate60.Create;
  XSLTemplate._Set_stylesheet(XSLStylesheet);
  XSLProcessor := XSLTemplate.createprocessor;
  XSLProcessor.Input := XMLDoc;

  if XSLProcessor.Transform then
    ResultMemo.Text := XSLProcessor.Output;
end;

XSLT转换的正确解决方案是什么?

EN

回答 1

Stack Overflow用户

发布于 2018-01-23 23:05:43

正如Martin所说,match="/"匹配树中的顶部节点(DOM和XPath 2.0将其称为文档节点,XPath 1.0将其称为根节点)。但是您已经通过提供树中最外层的元素(DOM将其称为文档元素)开始了转换。要匹配最外层的元素,需要使用模式match="/*"

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48401406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档