0
我正在嘗試爲使用DOMDocuments的節點獲取XPath。但是,我收到的回覆是/*/*[2]/*/*[1]/*[1]/*[5]
。任何人都知道這是爲什麼和/或可能的修復?getNodePath()未顯示元素
我的代碼:
$doc = new DOMDocument();
$doc->loadXML(file_get_contents($_FILES["xmlfile"]["tmp_name"]));
$xp = new DOMXpath($doc);
$domNodeList = $xp->evaluate("//*[@Name]") ;
foreach($domNodeList as $domNodeListItem)
{
if(preg_match('/^rectangle.*/i',$domNodeListItem->getAttribute('Name')) === 1)
{
echo 'path: <pre>'.print_r($domNodeListItem->getNodePath(),true).'</pre>' ;
}
}
實施例XML(下面的例子中給出了我/*/*[1]
和/*/*[2]
作爲輸出,預期是/Report/Rectangle
和/Report/MUAHAHA
):
<?xml version="1.0" encoding="UTF-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition" xmlns:cl="http://schemas.microsoft.com/sqlserver/reporting/2010/01/componentdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<Rectangle Name="Rectangle3">
<ReportItems>
<Textbox Name="Textbox3">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value />
<Style />
</TextRun>
</TextRuns>
<Style />
</Paragraph>
</Paragraphs>
<rd:DefaultName>Textbox3</rd:DefaultName>
<Top>0.16667in</Top>
<Left>0.15625in</Left>
<Height>0.25in</Height>
<Width>1in</Width>
<Style>
<Border>
<Style>None</Style>
</Border>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
</ReportItems>
<KeepTogether>true</KeepTogether>
<Top>0.66542in</Top>
<Left>2.53in</Left>
<Height>2.60417in</Height>
<Width>1.47917in</Width>
<ZIndex>3</ZIndex>
<Style>
<Border>
<Style>None</Style>
</Border>
</Style>
</Rectangle>
<MUAHAHA Name="Rectangle123">
<ReportItems>
<Textbox Name="Textbox3">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value />
<Style />
</TextRun>
</TextRuns>
<Style />
</Paragraph>
</Paragraphs>
<rd:DefaultName>Textbox3</rd:DefaultName>
<Top>0.16667in</Top>
<Left>0.15625in</Left>
<Height>0.25in</Height>
<Width>1in</Width>
<Style>
<Border>
<Style>None</Style>
</Border>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
</ReportItems>
<KeepTogether>true</KeepTogether>
<Top>0.66542in</Top>
<Left>2.53in</Left>
<Height>2.60417in</Height>
<Width>1.47917in</Width>
<ZIndex>3</ZIndex>
<Style>
<Border>
<Style>None</Style>
</Border>
</Style>
</MUAHAHA>
</Report>
你期望什麼呢? – choroba
我期望的路徑包含元素名稱,而不是通配符。 – dabuda
你能提供一個小例子XML,所以我們可以重現這個問題嗎? – ThW