2015-06-29 3 views
1

У меня есть 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

<?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> 

процесс я запустить входной XML с помощью XSLT, и это будет цикл через title.xml, а затем сопоставить регулярное выражение с phrase, находящейся внутри документов (здесь я взял 34 для справки), и он должен напечатать значение главы.

В моей XML 34/12 присутствует поэтому он должен напечатать <a href="34"/> где, как и в моем выходе он показывает <a href=""/>

Может кто-то пожалуйста, дайте мне знать, как я могу это исправить, и почему данные не получает тянут в первую дело.

Благодаря

+0

«* к моему удивлению, это не работает». «Что значит« не работает »? Пожалуйста, напишите ** воспроизводимый пример **, включая пример XML-ввода. –

+0

Это значение null, нет вывода – user3872094

+0

Можете ли вы разместить свой xml, который загружается через функцию документа – Saurav

ответ

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»

+0

Это работает, мне жаль, что фактическое требование состоит в том, чтобы соответствовать числу в 'input.xml', с фразой, присутствующей в' Chapter', путем циклического перехода по заголовку .xml – user3872094

+0

Если ответ работая, не забудьте принять ответ – Saurav

Смежные вопросы