2013-03-21 3 views
2

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

<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> 

+0

используя '..', чтобы получить родителя – kev

ответ

0

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

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

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

Спасибо, что сработал! – user2025508

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> 

Когда это преобразование применяется на поставленном (фрагмент, завернутые в один верхний элемент, чтобы стать wellformed) 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 эля чтобы исключить любое пространство перед сравнением.