2011-10-15 63 views
2

在PHP中使用簡單的XML庫並且一直使用w3 xpath語法獲得幫助的新手段。簡單的XML Xpath查詢問題

我有一個XML文件,看起來大致是這樣的:

<Xml_Configs> 
<Foo_Module> 
    <Front_Name>a</Front_Name> 
</Foo_Module> 
<Bar_Module> 
    <Front_Name>b</Front_Name> 
</Bar_Module> 
<Baz_Module> 
    <Front_Name>c</Front_Name> 
</Baz_Module> 
</Xml_Configs> 

我試圖找出哪些模塊B的Front_Name。現在我只想要得到的只是屬性相匹配,不關心獲取父,這裏就是我的嘗試:

$xmlObj->xpath('/Xml_Configs/*[@Front_Name="b"]'); 

這讓我什麼,但是:「/ Xml_Configs/*/Front_Name「確實給了我一個簡單的xml對象數組,它帶有a,b和c。和「/ Xml_Configs/*/[@ Front_Name =」b「]」給了我無效的表達式錯誤。

任何幫助你可以表示讚賞,謝謝!

回答

1

我試圖找出哪些模塊具有b個

`$xmlObj->xpath('/Xml_Configs/*[@Front_Name="b"]');` 

That gets me nothing 

是的Front_Name,因爲沒有屬於頂級元素Xml_Configs的兒童元素的任何屬性。

你想

/*/*[Front_Name = 'b'] 

這裏選擇有一個名爲Font_Name與字符串值"b"孩子頂件的所有兒童。

XSLT - 基於驗證

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

<xsl:template match="/"> 
    <xsl:copy-of select="/*/*[Front_Name = 'b']"/> 
</xsl:template> 
</xsl:stylesheet> 

當這個變換所提供的XML文檔施加:

<Xml_Configs> 
    <Foo_Module> 
     <Front_Name>a</Front_Name> 
    </Foo_Module> 
    <Bar_Module> 
     <Front_Name>b</Front_Name> 
    </Bar_Module> 
    <Baz_Module> 
     <Front_Name>c</Front_Name> 
    </Baz_Module> 
</Xml_Configs> 

其複製到輸出所選擇的節點

<Bar_Module> 
    <Front_Name>b</Front_Name> 
</Bar_Module> 

我建議您獲得the XPath Visualizer - 這個工具可以幫助數千名開發人員同時學習XPath,同時獲得樂趣。