【问题标题】:get attribute from xml file从xml文件中获取属性
【发布时间】:2010-07-27 20:06:14
【问题描述】:

我的 XML 文件条目:

<GlobalView xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
    <rels>
        <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
    </rels>

想要在关系元素中查询属性 ID.... 我正在使用下面给出的查询,它一直有效,直到元素关系并且没有给我 Id 属性的值。

for $file in doc("C:/Users/Raffay/Desktop/RnDxr.xml")
return $file/GlobalView/child::rels/child::Relationship

提前致谢

【问题讨论】:

    标签: xml namespaces xquery


    【解决方案1】:

    试试

    GlobalView/child::rels/child::Relationship/@Id
    

    或缩写形式

    GlobalView/rels/Relationship/@Id
    

    【讨论】:

    • 声明默认元素命名空间“schemas.openxmlformats.org/package/2006/relationships”; for $file in doc("C:/Users/Raffay/Desktop/RnDxr.xml") return $file/GlobalView/rels/Relationship/@Id 此代码给我以下错误:“XQuery 序列化错误!文档节点可能不会有一个属性节点或命名空间节点作为子节点”.... :( –
    【解决方案2】:

    使用

    declare default element namespace 
         "http://schemas.openxmlformats.org/package/2006/relationships";
    
    let $vIds := 
        for $file in doc("C:/Users/Raffay/Desktop/RnDxr.xml") 
         return $file/GlobalView/rels/Relationship/@Id
    

    提供的原始代码有两个明显的问题

    1. $file 中包含的 XML 文档具有默认命名空间。如果没有声明 default element namespace,表达式中的所有无前缀名称都被认为属于“无命名空间”,并且不会选择任何节点。

    2. 表达式的目的是选择一个Relationship元素,但是这个元素的Id属性才是真正想要的。

    【讨论】:

    • 声明默认元素命名空间“schemas.openxmlformats.org/package/2006/relationships”; for $file in doc("C:/Users/Raffay/Desktop/RnDxr.xml") return $file/GlobalView/rels/Relationship/@Id 此代码给我以下错误:“XQuery 序列化错误!文档节点可能不会有一个属性节点或命名空间节点作为子节点”.... :(
    • @user399493:是的,假设您将这些属性分配给一个变量。我编辑了我的答案,现在代码明确地这样做了。
    • 鉴于以下错误:XQuery 执行错误!语句意外结束
    • 如果没有您的修改,它会给出一个错误:[DataDirect][XQuery][err:SENR0001]以下给定查询不支持顶级属性节点。查询:for $file in doc("C:/Users/Raffay/Desktop/RnDxr.xml") return $file/GlobalView/rels/Relationship/@Id
    • @user399493:在我的解决方案中,我将序列中的所有属性收集到一个变量中。此后如何使用此变量取决于您,但您已经得到了问题的答案。
    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 2023-01-10
    • 2011-10-19
    • 2022-01-13
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多