gpt4 book ai didi

json - 将 XML 中的属性转换为 JSON

转载 作者:数据小太阳 更新时间:2023-10-29 02:34:07 24 4
gpt4 key购买 nike

我有一个 XML 文档,想将其转换为 JSON 字符串:

<?xml  version="1.0" encoding="UTF-8"?>
<root name="test-root">
<id lang="en">9876</id>
<jobCode name="Teacher" xmlns:teacher="http://example.com/ns/teacher">1009</jobCode>
</root>

我使用这个自定义配置来做到这一点:

let $config := json:config("custom")     
let $_ := map:put( $config, "whitespace", "ignore" )
let $_ := map:put( $config, "ignore-attribute-names",(xs:QName("name"),xs:QName("lang")) )
return json:transform-to-json( fn:doc("/test1.xml"),$config)

下面是这个脚本的输出:

{
"root": {
"id": "9876",
"jobCode": "1009"
}
}

这不是我所期望的,我想在元素 root 中包含 name 属性但忽略元素 jobCode 中的 name 属性。我的预期如下:

{
"root": {
"name": "test-root",
"id": "9876",
"jobCode": "1009"
}
}

如何自定义配置以获得此输出?谢谢!

最佳答案

我不认为该选项像您希望的那样先进。

在这种情况下,我会使用样式表来预处理我的 XML 以对其进行更多处理。这是一个工作示例:

  xquery version "1.0-ml";
import module namespace json="http://marklogic.com/xdmp/json"
at "/MarkLogic/json/json.xqy";


let $xml := <root name="test-root">
<id lang="en">9876</id>
<jobCode name="Teacher" xmlns:teacher="http://example.com/ns/teacher">1009</jobCode>
</root>

let $template := <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@name[name(./..) = 'jobCode']" />

<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

let $filtered-xml := xdmp:xslt-eval($template, $xml)

let $config := json:config("custom")
let $_ := map:put( $config, "whitespace", "ignore" )
let $_ := map:put( $config, "ignore-attribute-names",(xs:QName("lang")) )
return json:transform-to-json( $filtered-xml,$config)

结果:

{
"root": {
"name": "test-root",
"id": "9876",
"jobCode": "1009"
}
}

如果你走这条路,那么你也可以只匹配模板中的@lang,并一起删除忽略属性配置。

关于json - 将 XML 中的属性转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36688491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com