如何从XML文档中找到带有XPath查询的祖先元素?

时间:2013-03-21 01:32:21

标签: xml xpath nodes ancestor

我试图在下面粘贴的Xml文档中显示J. K. Rowling撰写的所有项目的ASIN。我不知道如何编写XPath,因为ASIN在ItemAttributes之外。我知道它应该是这样的: / ItemSearchResponse / Items / Item / ItemAttributes [作者=“J.K.罗琳”] /作者 但我不知道在哪里,但ASIN。有没有人有任何建议?

<Item>
  <ASIN>0747557462</ASIN>
  <ItemAttributes>
    <Author>Sarah Brown</Author>
    <Author>Gil McNeil</Author>
    <Creator Role="Foreword">J.K. Rowling</Creator>
    <Manufacturer>Bloomsbury UK</Manufacturer>
    <ProductGroup>Book</ProductGroup>
    <Title>Magic</Title>
  </ItemAttributes>
</Item>
<Item>
  <ASIN>0826452329</ASIN>t
  <ItemAttributes>
    <Author>Philip Nel</Author>
    <Manufacturer>Continuum</Manufacturer>
    <ProductGroup>Book</ProductGroup>
    <Title>J.K. Rowling's Harry Potter Novels: A Reader's Guide (Continuum Contemporaries) - Unauthorized</Title>
  </ItemAttributes>
</Item>
<Item>
  <ASIN>1571745424</ASIN>
  <ItemAttributes>
    <Author>George W. Beahm</Author>
    <Creator Role="Illustrator">Tim Kirk</Creator>
    <Manufacturer>Hampton Roads Pub Co</Manufacturer>
    <ProductGroup>Book</ProductGroup>
    <Title>Muggles and Magic: An Unofficial Guide to J.k. Rowling and the Harry Potter Phenomenon</Title>
  </ItemAttributes>
</Item>
<Item>
  <ASIN>0737716681</ASIN>
  <ItemAttributes>
    <Creator Role="Editor">Gary Wiener</Creator>
    <Manufacturer>Greenhaven Press</Manufacturer>
    <ProductGroup>Book</ProductGroup>
    <Title>JK Rowling (hardcover edition) (Literary Companion to Contemporary Authors)</Title>
  </ItemAttributes>
</Item>
<Item>
  <ASIN>1586638394</ASIN>
  <ItemAttributes>
    <Author>SparkNotes Editors</Author>
    <Manufacturer>SparkNotes</Manufacturer>
    <ProductGroup>Book</ProductGroup>
    <Title>J.K. Rowling (SparkNotes Library of Great Authors)</Title>
  </ItemAttributes>
</Item>
<Item>
  <ASIN>0972322108</ASIN>
  <ItemAttributes>
    <Author>John Granger</Author>
    <Manufacturer>Zossima Press</Manufacturer>
    <ProductGroup>Book</ProductGroup>
    <Title>The Hidden Key to Harry Potter: Understanding the Meaning, Genius, and Popularity of Joanne Rowling's Harry Potter Novels</Title>
  </ItemAttributes>
</Item>
<Item>
  <ASIN>1414321880</ASIN>
  <ItemAttributes>
    <Author>John Granger</Author>
    <Manufacturer>SaltRiver</Manufacturer>
    <ProductGroup>Book</ProductGroup>
    <Title>How Harry Cast His Spell: The Meaning Behind the Mania for J. K. Rowling's Bestselling Books</Title>
  </ItemAttributes>
</Item>
<Item>
  <ASIN>0545010225</ASIN>
  <ItemAttributes>
    <Author>J. K. Rowling</Author>
    <Creator Role="Illustrator">Mary GrandPré</Creator>
    <Manufacturer>Arthur A. Levine Books</Manufacturer>
    <ProductGroup>Book</ProductGroup>
    <Title>Harry Potter and the Deathly Hallows (Book 7)</Title>
  </ItemAttributes>
</Item>
<Item>
  <ASIN>B000RBZM6E</ASIN>
  <ItemAttributes>
    <Author>J.K. Rowling</Author>
    <Creator Role="Translator">Gili Bar-Hillel</Creator>
    <Manufacturer>Yediot Acharonot</Manufacturer>
    <ProductGroup>Book</ProductGroup>
    <Title>Harry Potter and the Goblet of Fire (Hebrew) (English and Hebrew Edition)</Title>
  </ItemAttributes>
</Item>
<Item>
  <ASIN>0439705908</ASIN>
  <ItemAttributes>
    <Author>J. K. Rowling</Author>
    <Manufacturer>Scholastic</Manufacturer>
    <ProductGroup>Book</ProductGroup>
    <Title>Harry Potter and the Order of the Phoenix (Year 5)</Title>
  </ItemAttributes>
</Item>

2 个答案:

答案 0 :(得分:1)

这是一个仅向前 XPath表达式,可以精确选择所需的节点:

/*/*[translate(ItemAttributes/Author, ' ', '')='J.K.Rowling']/ASIN

基于XSLT的验证

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

 <xsl:template match="/">
  <xsl:copy-of select=
  "/*/*[translate(ItemAttributes/Author, ' ', '')='J.K.Rowling']/ASIN"/>
 </xsl:template>
</xsl:stylesheet>

将此转换应用于提供的(片段,包裹在单个顶部元素中以使其格式正确)XML文档

<t>
    <Item>
        <ASIN>0747557462</ASIN>
        <ItemAttributes>
            <Author>Sarah Brown</Author>
            <Author>Gil McNeil</Author>
            <Creator Role="Foreword">J.K. Rowling</Creator>
            <Manufacturer>Bloomsbury UK</Manufacturer>
            <ProductGroup>Book</ProductGroup>
            <Title>Magic</Title>
        </ItemAttributes>
    </Item>
    <Item>
        <ASIN>0826452329</ASIN>t
        <ItemAttributes>
            <Author>Philip Nel</Author>
            <Manufacturer>Continuum</Manufacturer>
            <ProductGroup>Book</ProductGroup>
            <Title>J.K. Rowling's Harry Potter Novels: A Reader's Guide (Continuum Contemporaries) - Unauthorized</Title>
        </ItemAttributes>
    </Item>
    <Item>
        <ASIN>1571745424</ASIN>
        <ItemAttributes>
            <Author>George W. Beahm</Author>
            <Creator Role="Illustrator">Tim Kirk</Creator>
            <Manufacturer>Hampton Roads Pub Co</Manufacturer>
            <ProductGroup>Book</ProductGroup>
            <Title>Muggles and Magic: An Unofficial Guide to J.k. Rowling and the Harry Potter Phenomenon</Title>
        </ItemAttributes>
    </Item>
    <Item>
        <ASIN>0737716681</ASIN>
        <ItemAttributes>
            <Creator Role="Editor">Gary Wiener</Creator>
            <Manufacturer>Greenhaven Press</Manufacturer>
            <ProductGroup>Book</ProductGroup>
            <Title>JK Rowling (hardcover edition) (Literary Companion to Contemporary Authors)</Title>
        </ItemAttributes>
    </Item>
    <Item>
        <ASIN>1586638394</ASIN>
        <ItemAttributes>
            <Author>SparkNotes Editors</Author>
            <Manufacturer>SparkNotes</Manufacturer>
            <ProductGroup>Book</ProductGroup>
            <Title>J.K. Rowling (SparkNotes Library of Great Authors)</Title>
        </ItemAttributes>
    </Item>
    <Item>
        <ASIN>0972322108</ASIN>
        <ItemAttributes>
            <Author>John Granger</Author>
            <Manufacturer>Zossima Press</Manufacturer>
            <ProductGroup>Book</ProductGroup>
            <Title>The Hidden Key to Harry Potter: Understanding the Meaning, Genius, and Popularity of Joanne Rowling's Harry Potter Novels</Title>
        </ItemAttributes>
    </Item>
    <Item>
        <ASIN>1414321880</ASIN>
        <ItemAttributes>
            <Author>John Granger</Author>
            <Manufacturer>SaltRiver</Manufacturer>
            <ProductGroup>Book</ProductGroup>
            <Title>How Harry Cast His Spell: The Meaning Behind the Mania for J. K. Rowling's Bestselling Books</Title>
        </ItemAttributes>
    </Item>
    <Item>
        <ASIN>0545010225</ASIN>
        <ItemAttributes>
            <Author>J. K. Rowling</Author>
            <Creator Role="Illustrator">Mary GrandPré</Creator>
            <Manufacturer>Arthur A. Levine Books</Manufacturer>
            <ProductGroup>Book</ProductGroup>
            <Title>Harry Potter and the Deathly Hallows (Book 7)</Title>
        </ItemAttributes>
    </Item>
    <Item>
        <ASIN>B000RBZM6E</ASIN>
        <ItemAttributes>
            <Author>J.K. Rowling</Author>
            <Creator Role="Translator">Gili Bar-Hillel</Creator>
            <Manufacturer>Yediot Acharonot</Manufacturer>
            <ProductGroup>Book</ProductGroup>
            <Title>Harry Potter and the Goblet of Fire (Hebrew) (English and Hebrew Edition)</Title>
        </ItemAttributes>
    </Item>
    <Item>
        <ASIN>0439705908</ASIN>
        <ItemAttributes>
            <Author>J. K. Rowling</Author>
            <Manufacturer>Scholastic</Manufacturer>
            <ProductGroup>Book</ProductGroup>
            <Title>Harry Potter and the Order of the Phoenix (Year 5)</Title>
        </ItemAttributes>
    </Item>
</t>

评估XPath表达式并将选定的节点复制到输出中:

<ASIN>0545010225</ASIN>
<ASIN>B000RBZM6E</ASIN>
<ASIN>0439705908</ASIN>

请注意:我们在比较之前通过消除任何空格来忽略任何Author元素的字符串值中的不同空格数。

答案 1 :(得分:0)

您可以使用..访问父项,然后转到ASIN标记,将/../ASIN添加到当前路径。

试试这个:

/ItemSearchResponse/Items/Item/ItemAttributes[Author="J. K. Rowling"]/../ASIN