PHP xpath 查找元素
PHP xpath find elements
你好,我需要一些帮助来使用 PHP 和 xpath 找到我的 XML 元素。
这是我的一部分 xml:
"processen": {
"proces": [
{
"@attributes": {
"id": "B1221"
},
"velden": {
"kernomschrijving": "activiteit aanleggen alarminstallatie",
"model-kernomschrijving": "aanleggen alarminstallatie",
"naam": "Het beoordelen van een alarminstallatie",
"standaard-dossiernaam": {
"@attributes": {
"ref": "SCN0000029"
}
},
"[tag:taakveld]": "Bouwzaken & Procedures",
"proceseigenaar": "Bouwzaken",
"toelichting-proces": "bla die bla.",
"aanleiding": "Dit werkproces wordt intern getriggerd.",
"opmerking-proces": {
"@attributes": {
"ref": "SCN0000036"
}
},
"exportprofiel": {
"@attributes": {
"ref": "SCN0000037"
},
},...
比如我希望能够找到id(快速)并访问id B1221下的所有元素
我尝试了各种变体,但 none 有效:
$xml = simplexml_load_file( $filename );
$proces = $xml->xpath("//processen/proces/@attributes/id=B1221");
$proces = $xml->xpath("//processen/proces[@attributes/id=B1221]");
它总是returns一个空数组...
感谢您的帮助。
你在那里展示的不是XML;它是通过解析 XML 生成的 PHP 对象的某种表示形式,通过它您可以访问 XML.
的内容
这听起来像是一种迂腐的区分,但它实际上是您问题的关键:XPath 表达式并非特定于 PHP,因此不会搜索此结构;它们是搜索 XML 本身的标准语言。
因此,要构造正确的 XPath 表达式,您只需查看实际的 XML。从你展示的表现来看,我猜它看起来,部分是这样的:
<processen>
<proces id="B1816">
<velden>
<kernomschrijving>activiteit aanleggen alarminstallatie</kernomschrijving>
<model-kernomschrijving>aanleggen alarminstallatie</model-kernomschrijving>
<naam>Het beoordelen van een alarminstallatie</naam>
</velden>
</proces>
</processen>
在 XPath 中,您可以按名称、带有前导 @
的属性(如 id="..."
)和 double-quotes 中的文字字符串访问元素(标签)。 [...]
运算符的意思类似于“有”,因此 [@foo="bar"]
表示“具有属性 foo
,其值为字符串 bar
”。
这给了你这个:
$xml = simplexml_load_file( $filename );
$proces = $xml->xpath('//processen/proces[@id="B1816"]');
echo $proces[0]->asXML();
(这里是a live demo of that example。)
看起来你可能也有命名空间(名称中带有 :
的标签);这些需要一些额外的技巧 .
你好,我需要一些帮助来使用 PHP 和 xpath 找到我的 XML 元素。
这是我的一部分 xml:
"processen": {
"proces": [
{
"@attributes": {
"id": "B1221"
},
"velden": {
"kernomschrijving": "activiteit aanleggen alarminstallatie",
"model-kernomschrijving": "aanleggen alarminstallatie",
"naam": "Het beoordelen van een alarminstallatie",
"standaard-dossiernaam": {
"@attributes": {
"ref": "SCN0000029"
}
},
"[tag:taakveld]": "Bouwzaken & Procedures",
"proceseigenaar": "Bouwzaken",
"toelichting-proces": "bla die bla.",
"aanleiding": "Dit werkproces wordt intern getriggerd.",
"opmerking-proces": {
"@attributes": {
"ref": "SCN0000036"
}
},
"exportprofiel": {
"@attributes": {
"ref": "SCN0000037"
},
},...
比如我希望能够找到id(快速)并访问id B1221下的所有元素
我尝试了各种变体,但 none 有效:
$xml = simplexml_load_file( $filename );
$proces = $xml->xpath("//processen/proces/@attributes/id=B1221");
$proces = $xml->xpath("//processen/proces[@attributes/id=B1221]");
它总是returns一个空数组...
感谢您的帮助。
你在那里展示的不是XML;它是通过解析 XML 生成的 PHP 对象的某种表示形式,通过它您可以访问 XML.
的内容这听起来像是一种迂腐的区分,但它实际上是您问题的关键:XPath 表达式并非特定于 PHP,因此不会搜索此结构;它们是搜索 XML 本身的标准语言。
因此,要构造正确的 XPath 表达式,您只需查看实际的 XML。从你展示的表现来看,我猜它看起来,部分是这样的:
<processen>
<proces id="B1816">
<velden>
<kernomschrijving>activiteit aanleggen alarminstallatie</kernomschrijving>
<model-kernomschrijving>aanleggen alarminstallatie</model-kernomschrijving>
<naam>Het beoordelen van een alarminstallatie</naam>
</velden>
</proces>
</processen>
在 XPath 中,您可以按名称、带有前导 @
的属性(如 id="..."
)和 double-quotes 中的文字字符串访问元素(标签)。 [...]
运算符的意思类似于“有”,因此 [@foo="bar"]
表示“具有属性 foo
,其值为字符串 bar
”。
这给了你这个:
$xml = simplexml_load_file( $filename );
$proces = $xml->xpath('//processen/proces[@id="B1816"]');
echo $proces[0]->asXML();
(这里是a live demo of that example。)
看起来你可能也有命名空间(名称中带有 :
的标签);这些需要一些额外的技巧