我正在尝试解析这样的XML文档:
<cfset local.xml = xmlParse("<file_path>")>
<cfset local.getClassID = xmlSearch(local.xml, "//class/id")>
<cfdump var="#local.getClassID#">
XML DOC :
<ou_schedule xmlns="http://www.oracle.com/xmlns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="<XSD url>">
<schedule>
<category>
<id>Test Data</id>
<name>Test Data</name>
<classes>
<class>
<id>Test Data</id>
<title>Test Data</title>
<description_url>Test Data</description_url>
<duration>Test Data</duration>
<price>Test Data</price>
<instruction_language>Test Data</instruction_language>
<start_date>Test Data</start_date>
<start_time>Test Data</start_time>
<end_time>Test Data</end_time>
<location>Test Data</location>
<city>Test Data</city>
<customer_sat_flag>Test Data</customer_sat_flag>
<activity_version_id>Test Data</activity_version_id>
<event_id>Test Data</event_id>
</class>
</classes>
</category>
</schedule>
</ou_schedule>
我每次都得empty array
。当我从根节点删除所有属性,即
<ou_schedule>
然后我得到了正确的结果。
我错过了什么?
请帮助。谢谢。
答案 0 :(得分:4)
由于它具有命名空间,如果将XPath更改为“//:class /:id”,则应忽略根节点中的命名空间。
<cfset local.getClassID = xmlSearch(local.xml, "//:class/:id")>
似乎:节点语法在CF10中已更改。我发现这个Bug Report正在谈论它。
我刚刚在CF9上测试了:class /:id并且它有效,但它在CF10上打破了。我稍微修改了xpath,它在CF9和10上为我工作。
<cfset local.getClassID = xmlSearch(foo, "//*[local-name() = 'class']/*[local-name() = 'id']")>