2013-02-18 3 views
0

Ниже приведен пример ввода для моей HAP.HtmlAgilityPack XML Захват следующего брата

<?xml version="1.0" encoding="UTF-8"?> 

<html> 
    <div class="category">Name:</div> 
    <div class="category1">Company ABC</div> 
    <div class="category">ID:</div> 
    <div class="category1">1</div> 
    <div class="category">Location:</div> 
    <div class="category1">Home ABC</div> 
    <div class="category1">Home DEF</div> 
</html> 

Использование XPath это возможно, чтобы захватить следующую-родственный элемент, ограниченный предыдущим элементом значения атрибута? В этом случае, я хотел бы сохранить его в списке:

"Name" , {"Company ABC"} 
"ID", {"1"} 
"Location", {"Home ABC", "Home DEF"} 

ответ

0

Я не считаю, что это возможно только с XPaths, но это, безусловно, можно с помощью XSLT.

Это XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="div[@class='category']"> 
    <div> 
     <div class="category"> 
     <xsl:value-of select="."/> 
     </div> 
     <div> 
     <xsl:variable name="nextCategoryCount" select="count(following-sibling::div[@class='category'])"/> 
     <xsl:for-each select="following-sibling::div[count(following-sibling::div[@class='category']) = $nextCategoryCount]"> 
      <xsl:copy-of select="."/>   
     </xsl:for-each> 
     </div> 
    </div> 

    </xsl:template> 

    <xsl:template match="/html"> 
    <html> 
     <xsl:apply-templates select="div[@class='category']"/> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

применяется к образцу XML производит это:

<html> 
    <div> 
    <div class="category">Name:</div> 
    <div> 
     <div class="category1">Company ABC</div> 
    </div> 
    </div> 
    <div> 
    <div class="category">ID:</div> 
    <div> 
     <div class="category1">1</div> 
    </div> 
    </div> 
    <div> 
    <div class="category">Location:</div> 
    <div> 
     <div class="category1">Home ABC</div> 
     <div class="category1">Home DEF</div> 
    </div> 
    </div> 
</html> 

Работа осуществляется с помощью XPath:

following-sibling::div[count(following-sibling::div[@class='category']) = $nextCategoryCount] 

где $nextCategoryCount установлен на количество категорий, следующих за текущим. Это не может работать в чистом XPath, потому что не существует способа установить эту переменную перед выполнением выражения.

+0

Спасибо за усилие –

+0

@FreddieFabregas: добро пожаловать – MiMo

Смежные вопросы