Xslt 无法获取具有位置的节点的值
我有一个XML,其中有10个Xslt 无法获取具有位置的节点的值,xslt,Xslt,我有一个XML,其中有10个短语节点 我试图使用下面的XSLT获得第二个短语 <xsl:value-of select="document(concat('C:\Users\u0138039\Desktop\Proview\Files\','MCPV1_ ORD_34.XML'))/chapter//phrase[2]"/> 令我惊讶的是,这不起作用 当我使用下面的方法时 <xsl:value-of select="document(concat('C:\Users\u0
短语节点
我试图使用下面的XSLT获得第二个短语
<xsl:value-of select="document(concat('C:\Users\u0138039\Desktop\Proview\Files\','MCPV1_
ORD_34.XML'))/chapter//phrase[2]"/>
令我惊讶的是,这不起作用
当我使用下面的方法时
<xsl:value-of select="document(concat('C:\Users\u0138039\Desktop\Proview\Files\','MCPV1_
ORD_34.XML'))/chapter//phrase"/>
输入XML:
<?xml version="1.0" encoding="utf-8"?>
<index>
<secondaryie>certification, 34/12</secondaryie>
</index>
<xsl:template match="index">
<div class="index">
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="secondaryie">
<div class="secondaryie">
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="text()">
<xsl:analyze-string select="." regex="([\w]+)/([\w]+)">
<xsl:matching-substring>
<xsl:variable name="prent">
<xsl:for-each select="document('C:\Users\u0138039\Desktop\Proview\Files\title.xml')/entry/file">
<xsl:value-of select="document(concat('C:\Users\u0138039\Desktop\Proview\Files\',./@name))/chapter[//phrase=.]/@num"/>
</xsl:for-each>
</xsl:variable>
<a href="{$prent}">
<xsl:value-of select="."/>
</a>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
认证,34/12
title.xml
<?xml version="1.0" encoding="utf-8"?>
<entry>
<file name="MCPV1_ORD_30.xml"/>
<file name="MCPV1_ORD_31.xml"/>
<file name="MCPV1_ORD_32.xml"/>
<file name="MCPV1_ORD_33.xml"/>
<file name="MCPV1_ORD_34.xml"/>
<file name="MCPV1_ORD_35.xml"/>
</entry>
<?xml version="1.0" encoding="utf-8"?>
<chapter num="34">
<section level="sect1" number-type="manual" num="nonum">
<para>
<phrase>34/0/2</phrase>
</para>
</section>
<section level="sect1" number-type="manual" num="nonum">
<para>
<phrase>34/0/3</phrase>
</para>
</section>
<section level="sect1" number-type="manual" num="nonum">
<para>
<phrase>34/1</phrase>
</para>
<para>
<phrase>34/1/1</phrase>
</para>
</section>
</chapter>
第34章xml
<?xml version="1.0" encoding="utf-8"?>
<entry>
<file name="MCPV1_ORD_30.xml"/>
<file name="MCPV1_ORD_31.xml"/>
<file name="MCPV1_ORD_32.xml"/>
<file name="MCPV1_ORD_33.xml"/>
<file name="MCPV1_ORD_34.xml"/>
<file name="MCPV1_ORD_35.xml"/>
</entry>
<?xml version="1.0" encoding="utf-8"?>
<chapter num="34">
<section level="sect1" number-type="manual" num="nonum">
<para>
<phrase>34/0/2</phrase>
</para>
</section>
<section level="sect1" number-type="manual" num="nonum">
<para>
<phrase>34/0/3</phrase>
</para>
</section>
<section level="sect1" number-type="manual" num="nonum">
<para>
<phrase>34/1</phrase>
</para>
<para>
<phrase>34/1/1</phrase>
</para>
</section>
</chapter>
34/0/2
34/0/3
34/1
34/1/1
XSLT:
<?xml version="1.0" encoding="utf-8"?>
<index>
<secondaryie>certification, 34/12</secondaryie>
</index>
<xsl:template match="index">
<div class="index">
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="secondaryie">
<div class="secondaryie">
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="text()">
<xsl:analyze-string select="." regex="([\w]+)/([\w]+)">
<xsl:matching-substring>
<xsl:variable name="prent">
<xsl:for-each select="document('C:\Users\u0138039\Desktop\Proview\Files\title.xml')/entry/file">
<xsl:value-of select="document(concat('C:\Users\u0138039\Desktop\Proview\Files\',./@name))/chapter[//phrase=.]/@num"/>
</xsl:for-each>
</xsl:variable>
<a href="{$prent}">
<xsl:value-of select="."/>
</a>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
过程是我使用XSLT运行输入XML,它将循环通过title.XML,然后将正则表达式与文档中的短语匹配(这里我使用34作为参考),它应该打印章节值
在我的XML中存在34/12
,因此它应该打印
,在我的输出中显示
请有人告诉我,我如何修复它,以及为什么在第一种情况下没有提取数据
谢谢而不是这个
<xsl:value-of select="document(concat('C:\Users\u0138039\Desktop\Proview\Files\','MCPV1_
ORD_34.XML'))/chapter//phrase[2]"/>
试试这个:
<xsl:value-of select="(document(concat(C:\Users\u0138039\Desktop\Proview\Files\','MCPV1_ORD_34.XML'))/chapter//phrase)[2]"/>
您将获得第二个节点。对于你的34.xml,我得到了一个值为“34/0/3”的节点。“让我惊讶的是,它不工作。”你说的“不工作”是什么意思?请发布一个可复制的示例,包括一个示例XML输入。这会抛出null,没有输出您可以发布通过文档functionHi@michael.hor257k加载的XML吗?很抱歉,延迟,我发布了示例XML和XSLT以及当前和预期的outputHi@Saurav,我已经更新了我的问题这是有效的,很抱歉,实际要求是通过title.xml循环将input.xml
中的数字与章节中的短语匹配如果答案有效,请不要忘记接受答案