在coldfusion中使用已定义的模式解析XML

时间:2015-03-30 12:34:03

标签: xml coldfusion xml-parsing

我正在尝试解析这样的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>然后我得到了正确的结果。 我错过了什么?

请帮助。谢谢。

1 个答案:

答案 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']")>