我有一个XML,其中有10个phrase
个节点。
我正在尝试使用下面的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>
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>
第34章
<?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>
XSLT:
<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,然后将正则表达式与文档中存在的phrase
匹配(这里我拿了34作为参考),它应该打印出来章节价值。
在我的XML中34/12
存在,因此它应该打印<a href="34"/>
,因为在我的输出中它显示<a href=""/>
有人可以告诉我,我该如何解决这个问题以及为什么数据在第一种情况下无法获取。
由于
答案 0 :(得分:2)
而不是这个
<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'的节点