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