Я пытаюсь получить XPath для узла с использованием DOMDocuments. Однако ответ, который я получаю, - /*/*[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