Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 如何使用XPATH访问此输入中的元素_Xslt - Fatal编程技术网

Xslt 如何使用XPATH访问此输入中的元素

Xslt 如何使用XPATH访问此输入中的元素,xslt,Xslt,我使用XPath来获取输入xml中所示的文本值 <stream> <Services> <ServicesSub> <title>Parameter Calculations</title> <list1 type="unordered-bullet"> <item> <premier>

我使用XPath来获取输入xml中所示的文本值

     <stream>
    <Services>
    <ServicesSub>
        <title>Parameter Calculations</title>
        <list1 type="unordered-bullet">
            <item>
                <premier>
                    <link Id="1222">Sheet Size</link>
                    <link Id="433">Hydraulic System</link>
                </premier>
            </item>
            <item>
                <premier> Review 
<link Id="342332">Diagnose</link>

Rational Approach</premier>
            </item>
            <item>
                <premier>
                    <link Id="222">Process</link>
                </premier>
            </item>
        </list1>
    </ServicesSub>
    <ServicesSub>
        <title>Parameter Set</title>
        <table TableNumber="tab1" titlesource="no-title" frame="all" pgwide="page-wide">
            <tgroup cols="5" colsep="1" rowsep="1" align="left" charoff="50" char="">
                <colspec ColumnName="col1" colwidth="2.77in"/>
                <colspec ColumnName="col2" colwidth="1.10in"/>

                  <thead valign="bottom">
                    <row RowNumber="row1">
                        <entry ColumnName="col1" morerows="0" rotate="0" valign="bottom" align="center">
                            <ptxt>Price less</ptxt>
                        </entry>
                        <entry ColumnName="col2" morerows="0" rotate="0" valign="bottom" align="center">
                            <ptxt>Price more</ptxt>
                        </entry>
                        <entry ColumnName="col3" morerows="0" rotate="0" valign="bottom" align="center">
                            <ptxt>Open Price</ptxt>
                        </entry>
                    </row>
                </thead>
                <tbody valign="top">
                    <row RowNumber="row1">
                        <entry ColumnName="col1" morerows="0" rotate="0" valign="middle">
                            <ptxt>Sheet</ptxt>
                        </entry>
                        <entry ColumnName="col2" morerows="0" rotate="0" valign="middle" align="center">
                            <ptxt>Sheets1</ptxt>
                        </entry>
                    </row>
                    <row RowNumber="row2">
                        <entry ColumnName="col1" morerows="0" rotate="0" valign="middle">
                            <ptxt>Electric failure</ptxt>
                        </entry>
                        <entry ColumnName="col2" morerows="0" rotate="0" valign="middle" align="center">
                            <ptxt>Elec fails</ptxt>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </ServicesSub>
</Services>
</stream>
谢谢
Ramm

尝试此XPath,它将返回所有匹配的ptxt元素

stream/Services/ServicesSub
   [title[text() = 'Parameter Set']]/table/tgroup/thead/row/entry/ptxt
例如,给定以下XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="/">
         <xsl:apply-templates select="stream/Services/ServicesSub[title[text() = 'Parameter Set']]/table/tgroup/thead/row/entry/ptxt"/>
   </xsl:template>

   <xsl:template match="ptxt">
      <value>
         <xsl:value-of select="." />
      </value>
   </xsl:template>
</xsl:stylesheet>

当应用于输入时,XML将生成以下输出

<value>Price less</value>
<value>Price more</value>
<value>Open Price</value>
价格更低
价格更高
开盘价

注意,您没有提到是否有重复的值,以及应该如何处理这些值。如果您有重复项并希望忽略它们,则需要仔细阅读分组(XSLT 1.0中的Muenchian分组)。

谢谢Tim。在我的表达中,我遗漏了标题前的额外括号。是的,我在“参数集”中设置了重复的值和空间,因此无法完全提取数据。我该如何做呢?如果您无法解决如何使用分组删除重复项,那么最好再问另一个问题,重复项将显示在示例XML中。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="/">
         <xsl:apply-templates select="stream/Services/ServicesSub[title[text() = 'Parameter Set']]/table/tgroup/thead/row/entry/ptxt"/>
   </xsl:template>

   <xsl:template match="ptxt">
      <value>
         <xsl:value-of select="." />
      </value>
   </xsl:template>
</xsl:stylesheet>
<value>Price less</value>
<value>Price more</value>
<value>Open Price</value>