Java 将嵌套XML文件解析为节点集

Java 将嵌套XML文件解析为节点集,java,xml,xslt,nested,apache-fop,Java,Xml,Xslt,Nested,Apache Fop,我有个问题。我有一个xml文件,如下所示: Main.xml <?xml version="1.0" encoding="ISO-8859-1"?> <msrsw> <software> <chapter> <name> Hello world</sample> <xref type="xml">C:\ABC\NestedXML.xml</xref> </chap

我有个问题。我有一个xml文件,如下所示:

Main.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<msrsw>
  <software>
  <chapter>
     <name> Hello world</sample>
     <xref type="xml">C:\ABC\NestedXML.xml</xref>
  </chapter>
  </software>
</msrsw>
当我删除$XMLFile-
时,它可以很好地处理Main.xml文件的内容。 当我只在外部参照模板中显示current()的值时,它将解析NestedXml.xml文件并以PDF格式显示字符串值

预期输出为:

Hello world

Nested XML

14

Canada
我的要求是将NestedXML.xml的节点集嵌入
标记中,并递归地应用该节点集上的模板。 但是document()函数为我提供了NestedXml.xml的解析字符串内容

我不想使用document()函数,只想获取NestedXml.xml的字符串值。我需要使用相同的XSLT解析NestedXml.xml的所有标记。
请告诉我哪里出了问题。这种方法正确吗?还有别的办法吗?
或者不可能使用XSLT以这种方式执行,而且XSLT只允许包含解析的字符串值?

如果您只需要一些文本节点,样式表就不需要那么复杂。尝试以下更简单的样式表:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
    <xsl:apply-templates select="msrsw/software/chapter/name"/>
    <xsl:apply-templates select="document(msrsw/software/chapter/xref)/*"/>
</xsl:template>
<xsl:template match="text()">
    <xsl:value-of select="normalize-space()"/>
    <xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>     


你能用
NestedXML.xml
的内容编辑你的问题并发布你的预期结果吗。另外,您发布的
Main.xml
的内容不是有效的xml,请更正。我希望现在更清楚:)我想我的问题还不清楚。我这里有2个xml文件。运行此xslt的Main.xml。当Main.xml中遇到NestedXml.xml时,xslt应该获取NestedXml.xml的节点并开始解析NestedXml.xml的节点。两个文件将具有相同类型的节点。它应该类似于--startParsingXML(){if xref,fetch path和startParsingXML()}。MSRSW标签可以动态地包含任何标签。我展示的是一个非常小的样本。实际上,我的xml非常庞大。
Invalid token XMLFile. 
Hello world

Nested XML

14

Canada
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
    <xsl:apply-templates select="msrsw/software/chapter/name"/>
    <xsl:apply-templates select="document(msrsw/software/chapter/xref)/*"/>
</xsl:template>
<xsl:template match="text()">
    <xsl:value-of select="normalize-space()"/>
    <xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>