【问题标题】:Parsing XML with defined schema in coldfusion在coldfusion中使用定义的模式解析XML
【发布时间】:2015-03-30 12:34:03
【问题描述】:

我正在尝试解析这样的 XML 文档:

<cfset local.xml = xmlParse("<file_path>")>
<cfset local.getClassID = xmlSearch(local.xml, "//class/id")>
<cfdump var="#local.getClassID#">

XML 文档

<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。当我从根节点删除所有属性时,即 &lt;ou_schedule&gt; 然后我得到了正确的结果。 我错过了什么?

请帮忙。提前致谢。

【问题讨论】:

    标签: xml coldfusion xml-parsing


    【解决方案1】:

    由于它有一个命名空间,如果您将 XPath 更改为“//:class/:id”,它应该忽略根节点中的命名空间。

    <cfset local.getClassID = xmlSearch(local.xml, "//:class/:id")>
    

    似乎 :node 语法在 CF10 中发生了更改。我发现这个Bug Report 正在谈论它。

    我刚刚在 CF9 上测试了 :class/:id 并且它工作正常,但它在 CF10 上坏了。我稍微修改了 xpath,它在 CF9 和 10 上对我有用。

    <cfset local.getClassID = xmlSearch(foo, "//*[local-name() = 'class']/*[local-name() = 'id']")>
    

    【讨论】:

    • 我收到错误消息。 Unable to process the result of the XMLSearch for Unexpected colon at start of token.
    • 您的 ColdFusion 版本是什么?
    • 目前我正在使用 CF 10,但我也需要它在 CF 9 上工作。
    • 我已经更新了我的答案。我没有在 Lucee 上测试过。
    • 好东西!在 CF10 上遇到这个问题,你的修复成功了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2023-01-21
    相关资源
    最近更新 更多