使用具有多个条件的xpath从xml文件中提取值

开发者

我有这个xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<dev>
 <word string="test1" occurrences="39">
  <systems>
   <system name="paraview">
    <pos file="" part="noun" line="0" occ="39"/>
   </system>
  </systems>
 </word>
 <word string="Format" occurrences="39">
  <systems>
   <system name="paraview">
    <pos file="" part="verb" line="0" occ="40"/>
   </system>
  </systems>
 </word>
 <word string="Source" occurrences="16">
  <systems>
   <system name="paraview">
    <pos file="" part="verb" line="0" occ="16"/>
   </system>
  </systems>
 </word>
 <word string="p4" occurrences="1">
  <systems>
   <system name="Pstoedit">
    <pos file="" part="pronoun" line="0" occ="1"/>
   </system>
  </systems>
 </word>
 <word string="test1" occurrences="3">
  <systems>
   <system name="Pstoedit">
    <pos file="" part="noun" line="0" occ="3"/>
   </system>
  </systems>
 </word>
</dev>

我试图提取指定以下条件的这两个系统[paraview&Pstoedit],这两个系统应该具有相同的确切字符串。所以输出应该给我匹配的数量,然后说是的,有两个系统要满足您的条件,匹配的字符串是test1

我使用xmllint尝试了不同的命令,而我认为最接近的最终命令是:

xmllint --xpath '//word/systems/system[@name="Pstoedit"][@name="paraview"]/pos[@part="noun"]' file.xml

如何在xpath中使用两个条件进行比较?请指教。

更新:

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

<xsl:key name="paraview" match="system[@name='paraview']" use="ancestor::word/@string" />

<xsl:template match="/dev">
    <html>
        <body>
            <h2>Number of matched words</h2>
            <table border="1">
                <tr bgcolor="#9acd32">
                 <th>Total</th>   
                 <th>Words</th>
                </tr>
    <xsl:variable name="pairs" select="word/systems/system[@name='Pstoedit'][key('paraview', ancestor::word/@string)]" />
    <result>
        <tr>
        <count-pairs>          
           <td> <xsl:value-of select="count($pairs)"/> </td>
        </count-pairs>
        </tr>
        <tr>
        <match-strings>
           <td> <xsl:for-each select="$pairs"> </td>
                 <string>
            <td>   <xsl:value-of select="ancestor::word/@string"/> </td>
                </string>
            </tr>
            </xsl:for-each>
        </match-strings>
    </result>
    </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

这是我得到的结果:结果我需要将它们安排在基于以前的xls和html代码的表中,例如:

模板

michael.hor257k

我试图提取指定以下条件的这两个系统[paraview&Pstoedit],这两个系统应该具有相同的确切字符串。

您可以通过以下方式选择所有具有匹配系统的Pstoedit系统(或更确切地说,其祖先wordparaview

/dev/word[systems/system/@name='Pstoedit'][@string=/dev/word[systems/system/@name='paraview']/@string]

输出应该给我匹配的数量,然后说是的,有两个系统要满足您的条件...

好吧,每个选定的节点都代表一,因此:

2 * count ( $theabovexpression )

会给您涉及的节点总数。


...并且匹配的字符串是test1

我不认为仅XPath就有办法做到这一点。请记住,可能有不止一对,并且每个匹配的字符串可能都不同。但是,在XSLT中,您可以执行以下操作:

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

<xsl:key name="paraview" match="system[@name='paraview']" use="ancestor::word/@string" />

<xsl:template match="/dev">
    <xsl:variable name="pairs" select="word/systems/system[@name='Pstoedit'][key('paraview', ancestor::word/@string)]" />
    <result>
        <count-pairs>
            <xsl:value-of select="count($pairs)"/>
        </count-pairs>
        <match-strings>
            <xsl:for-each select="$pairs">
                <string>
                    <xsl:value-of select="ancestor::word/@string"/>
                </string>
            </xsl:for-each>
        </match-strings>
    </result>
</xsl:template>

</xsl:stylesheet>

返回:

<?xml version="1.0" encoding="UTF-8"?>
<result>
  <count-pairs>1</count-pairs>
  <match-strings>
    <string>test1</string>
  </match-strings>
</result>

编辑:

我只想要两列表中的字符串列表和总计数

尝试这种方式:

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

<xsl:key name="paraview" match="system[@name='paraview']" use="ancestor::word/@string" />

<xsl:template match="/dev">
    <xsl:variable name="pairs" select="word/systems/system[@name='Pstoedit'][key('paraview', ancestor::word/@string)]" />
    <xsl:variable name="count-pairs" select="count($pairs)" />
    <table border="1">
        <tr>
            <th>Strings</th>
            <th>Total</th>
        </tr>
        <xsl:for-each select="$pairs">
            <tr>
                <td><xsl:value-of select="ancestor::word/@string"/></td>
                <xsl:if test="position() = 1">
                    <td rowspan="{$count-pairs}">
                        <xsl:value-of select="$count-pairs"/>
                    </td>
                </xsl:if>
            </tr>
        </xsl:for-each>
    </table>
</xsl:template>

</xsl:stylesheet>

这将返回(例如,当找到两个匹配对时):

<table border="1">
   <tr>
      <th>Strings</th>
      <th>Total</th>
   </tr>
   <tr>
      <td>stringone</td>
      <td rowspan="2">2</td>
   </tr>
   <tr>
      <td>stringtwo</td>
   </tr>
</table>

您的浏览器应将其呈现为:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 xpath 从 xml 元素中提取值

来自分类Dev

使用具有布尔表达式的数组从列表中提取值

来自分类Dev

使用具有多个根元素的XML文件

来自分类Dev

在Oracle中,如何从具有多个值的XML / CLOB字段中提取值?

来自分类Dev

如何从具有名称空间的xml文件中提取值?

来自分类Dev

使用Xidel如何从xml文件中提取值

来自分类Dev

使用具有编号ID的文件A从与ID匹配的文件B行中提取第23列

来自分类Dev

使用 XSLT 从任何 xml 中提取具有值的所有文本节点的 xpath

来自分类Dev

如何使用xpath从具有相同类名的多个div中提取链接

来自分类Dev

从xml文件中提取值,简单的例子

来自分类Dev

从xml文件,bash中提取值

来自分类Dev

同时使用具有多个条件的jQuery .find()吗?

来自分类Dev

同时使用具有多个条件的jQuery .find()吗?

来自分类Dev

使用具有多个重复条件的“重复键”

来自分类Dev

使用具有if条件的import minidom解析xml

来自分类Dev

如何从具有多个值的JSON文件中提取数据

来自分类Dev

使用Python ElementTree从XML中提取值

来自分类Dev

使用SuperObject从JSON文件中提取值

来自分类Dev

使用SuperObject从JSON文件中提取值

来自分类Dev

使用Shell脚本从文件中提取值

来自分类Dev

使用具有特定编码的Jsoup从html字符串中提取文本

来自分类Dev

使用数组:从具有简单条件的数组中提取数组

来自分类Dev

使用xPath的Powershell脚本中的.SelectSingleNode无法从web.config文件中提取值

来自分类Dev

使用R从xml文件中提取多个值

来自分类Dev

根据多个值条件从数组中提取值

来自分类Dev

XML 中具有多个条件的 Xpath 查询

来自分类Dev

使用XPath从JSON数组中提取值吗?

来自分类Dev

使用XPath从JSON数组中提取值吗?

来自分类Dev

从由多个键键控的文件中提取值

Related 相关文章

  1. 1

    使用 xpath 从 xml 元素中提取值

  2. 2

    使用具有布尔表达式的数组从列表中提取值

  3. 3

    使用具有多个根元素的XML文件

  4. 4

    在Oracle中,如何从具有多个值的XML / CLOB字段中提取值?

  5. 5

    如何从具有名称空间的xml文件中提取值?

  6. 6

    使用Xidel如何从xml文件中提取值

  7. 7

    使用具有编号ID的文件A从与ID匹配的文件B行中提取第23列

  8. 8

    使用 XSLT 从任何 xml 中提取具有值的所有文本节点的 xpath

  9. 9

    如何使用xpath从具有相同类名的多个div中提取链接

  10. 10

    从xml文件中提取值,简单的例子

  11. 11

    从xml文件,bash中提取值

  12. 12

    同时使用具有多个条件的jQuery .find()吗?

  13. 13

    同时使用具有多个条件的jQuery .find()吗?

  14. 14

    使用具有多个重复条件的“重复键”

  15. 15

    使用具有if条件的import minidom解析xml

  16. 16

    如何从具有多个值的JSON文件中提取数据

  17. 17

    使用Python ElementTree从XML中提取值

  18. 18

    使用SuperObject从JSON文件中提取值

  19. 19

    使用SuperObject从JSON文件中提取值

  20. 20

    使用Shell脚本从文件中提取值

  21. 21

    使用具有特定编码的Jsoup从html字符串中提取文本

  22. 22

    使用数组:从具有简单条件的数组中提取数组

  23. 23

    使用xPath的Powershell脚本中的.SelectSingleNode无法从web.config文件中提取值

  24. 24

    使用R从xml文件中提取多个值

  25. 25

    根据多个值条件从数组中提取值

  26. 26

    XML 中具有多个条件的 Xpath 查询

  27. 27

    使用XPath从JSON数组中提取值吗?

  28. 28

    使用XPath从JSON数组中提取值吗?

  29. 29

    从由多个键键控的文件中提取值

热门标签

归档