无法获取具有位置的节点的值

时间:2015-06-29 08:38:29

标签: xslt

我有一个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=""/>

有人可以告诉我,我该如何解决这个问题以及为什么数据在第一种情况下无法获取。

由于

1 个答案:

答案 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'的节点