Как найти элемент-предок с помощью запроса XPath из XML-документа?

Я пытаюсь показать ASIN всех элементов, созданных Дж. К. Роулинг, из документа Xml, который я вставил ниже. Я не знаю, как написать XPath, так как ASIN находится за пределами ItemAttributes. Я знаю, что это должно быть что-то вроде этого: /ItemSearchResponse/Items/Item/ItemAttributes[Author="J.K. Rowling"]/Author, но я не знаю, куда, кроме 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>


person user2025508    schedule 21.03.2013    source источник
comment
используя .. для получения родителя   -  person kev    schedule 21.03.2013


Ответы (2)


Вот выражение 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, удаляя все пробелы перед сравнением.

person Dimitre Novatchev    schedule 21.03.2013

Вы можете использовать .. для доступа к родительскому элементу, а затем перейти к тегу ASIN, добавив /../ASIN к вашему текущему пути.

Попробуй это:

/ItemSearchResponse/Items/Item/ItemAttributes[Author="J. K. Rowling"]/../ASIN
person Bohemian♦    schedule 21.03.2013