0

在单个 XSLT 文件中是否有一种方法可以首先打开一个 XML 文件并提取一个带有子元素的元素,然后将该元素填充到第二个 XML 文件中?

如果不能在一个 XSLT 中完成,那么我选择的语言将是 vb 脚本。

我在这里看到了很多不同的例子,但我只是很困惑,不理解其中的大多数。

这是我用于从 XML1 中提取节点的 XSL:

  <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output 
      method="xml"
      omit-xml-declaration="yes" 
      indent="yes"
      encoding="ISO-8859-1"/>
    <xsl:template match="/">
    <xsl:copy-of select="root/Collection/Item/." />
    </xsl:template> 
    </xsl:stylesheet> 

我想获取生成的项目并将其附加到 XML2 中的相同 XPATH、根/集合中。

我有一个来自这个答案的 vb 脚本How to save XML to a file (Thank you Andrew Cooper),它将 XML 返回到 memvar。

XML1:

<root>
 <collection1>
  <item attr1, attr2...>  ---this is what I am getting
   <more>
   </more>
  </item>
 <collection1>
 <collection2>
  <item attr1, attr2...>
   <more>
   </more>
  </item>
 <collection2>
 ...
 <collection_n>
  <item attr1, attr2...>
   <more>
   </more>
  </item>
 <collection_n>
</root>

XML2:

<root>
 <collection1>
  <item attr1, attr2...>
   <more>
   </more>
  </item>
---- i want to insert node from XML1 here, only in collection1
 <collection1>
 <collection2>
  <item attr1, attr2...>
   <more>
   </more>
  </item>
 <collection2>
 ...
 <collection_n>
  <item attr1, attr2...>
   <more>
   </more>
  </item>
 <collection_n>
</root>

所以新的 XML2:

<root>
 <collection1>
  <item attr1, attr2...>
   <more>
   </more>
  </item>
  <item attr1, attr2...>
   <more>
   </more>
  </item>
 <collection1>
 <collection2>
  <item attr1, attr2...>
   <more>
   </more>
  </item>
 <collection2>
 ...
 <collection_n>
  <item attr1, attr2...>
   <more>
   </more>
  </item>
 <collection_n>
</root>
4

1 回答 1

2

您将使用该document()函数加载外部文档,以便将它们与您正在运行转换的文档合并。xsl:param或者,如果您在调用 XSLT 时将它们作为内存中的 DOM 树,则可以将它们作为节点集提供给模板参数 ( )。

看看我一周前回答的这个问题。这正是关于如何从多个文档中合并位于同一合并点(认为相同的 XPath)的内容。

希望能帮助到你。如果没有,请询​​问更具体的问题,包括哪些内容不清楚、您尝试过哪些内容以及哪些内容不适合您

于 2012-05-17T21:05:12.090 回答