我是XSLT的新手,并且开始使用XML& amp; XSLT。
我有xml文件,其中有很多孩子和他们的子孩子。
现在,当我使用xsl获取xml时,它可以正常用于父节点但子节点我没有获得任何数据。 XML文件:
<jrnl:bodytext>
<level>
<bodytext>
<pgrp>
<heading>
<title>
<emph typestyle="bf">1. Orange</emph>
</title>
</heading>
<p>
<text>Paragraph 1</text>
</p>
<p>
<text>Paragraph 2<text>
</p>
<p>
<text>Paragraph 3</text>
</p>
</pgrp>
<pgrp>
<heading>
<title>
<emph typestyle="bf">2. Apple </emph>
</title>
</heading>
<pgrp>
<heading>
<title>(a) Introduction</title>
</heading>
<p>
<text>Paragraph 1</text>
</p>
</pgrp>
<pgrp>
<heading>
<title>(b) The Facts</title>
</heading>
<p>
<text>Paragraph 2</text>
</p>
<p>
<text>Paragraph 3</text>
</p>
</pgrp>
<pgrp>
<heading>
<title>(c) Mango</title>
</heading>
<p>
<text>Paragraph 1</text>
</p>
<p>
<text>Paragraph 2</fnr>
</text>
</p>
<p>
<text>Paragraph 3</text>
</p>
</pgrp>
<pgrp>
<heading>
<title>(d) Misreading of Authority</title>
</heading>
<p>
<text>Paragraph 1</text>
</p>
<p>
<text>Paragraph 2</text>
</p>
<p>
<text>Paragraph 3</text>
</p>
</pgrp>
<pgrp>
<heading>
<title>(e) The case</title>
</heading>
<p>
<text>Paragraph 1</text>
</p>
<p>
<text>Paragraph 2
</text>
</p>
<p>
<text>Paragraph 3</text>
</p>
</pgrp>
</pgrp>
<pgrp>
<heading>
<title>
<emph typestyle="bf">3. Principles</emph>
</title>
</heading>
<p>
<text>Paragraph 1</text>
</p>
<p>
<text>Paragraph 2</text>
</p>
<p>
<text>Paragraph 3</text>
</p>
<p>
<text>Paragraph 4</text>
</p>
</pgrp>
<pgrp>
<heading>
<title>
<emph typestyle="bf">4. Guidelines </emph>
</title>
</heading>
<p>
<text>Paragraph 1</text>
</p>
<p>
<text>Paragraph 2</text>
</p>
<p>
<l>
<li>
<lilabel>(i)</lilabel>
<p>
<text>Paragraph 2.1</text>
</p>
</li>
</l>
</p>
<p>
<text>Pragraph 3</text>
</p>
</pgrp>
<pgrp>
<heading>
<title>
<emph typestyle="bf">5. Conclusion</emph>
</title>
</heading>
<p>
<text>Paragraph 1</text>
</p>
</pgrp>
</bodytext>
</level>
</jrnl:bodytext>
现在我想要获取所有,标题和文本数据。虽然我可以获得所有外部数据,但我无法获得他们的子数据。
这是XSL代码
<xsl:for-each select="//jrnl:bodytext/level/bodytext/pgrp">
<xsl:text>$T$=</xsl:text>
<xsl:value-of select="heading/title/emph"/>
<xsl:text>
</xsl:text>
<xsl:for-each select="p">
<xsl:text>$T</xsl:text>
<xsl:value-of select="text"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:for-each>
为了扩展这个问题,现在我尝试了与建议相同的代码但没有任何反应。
请参阅下文,我尝试过的内容。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:jrnl="http://www.abc.com/glp/jrnl" >
<xsl:template match="//jrnl:bodytext">
<xsl:for-each select="level/bodytext">
<xsl:for-each select="pgrp">
<xsl:text>$T$=</xsl:text>
<xsl:value-of select="heading/title/emph"/>
<xsl:text>
</xsl:text>
<xsl:for-each select="p">
<xsl:text>$T</xsl:text>
<xsl:value-of select="text"/>
<xsl:text>
</xsl:text> </xsl:for-each>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我得到了什么输出
$T$=1. Orange
$TParagraph 1
$TParagraph 2
$TParagraph 3
$T$=2. Apple
$T$=3. Principles
$TParagraph 1
$TParagraph 2
$TParagraph 3
$TParagraph 4
$T$=4. Guidelines
$TParagraph 1
$TParagraph 2
$T
$TPragraph 3
$T$=5. Conclusion
$TParagraph 1
在这种情况下,pgrp 2(Apple)的文本必须大于1,而在输出中我只得到1个条目,即$ T $ = 2。 Apple
答案 0 :(得分:0)
考虑以下输入片段
<pgrp>
<heading>
<title>
<emph typestyle="bf">2. Apple </emph>
</title>
</heading>
<pgrp>
在这里,我们可以看到其中有一个。因此
中的选择器<xsl:for-each select="//jrnl:bodytext/level/bodytext/pgrp">
不起作用。要使其工作,您需要在当前标记下的单独for-each标记中选择pgrp