Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用XPath获取请求XML响应解析以生成JS对象_Javascript_Xml_Xpath_Tree_Wms - Fatal编程技术网

Javascript 使用XPath获取请求XML响应解析以生成JS对象

Javascript 使用XPath获取请求XML响应解析以生成JS对象,javascript,xml,xpath,tree,wms,Javascript,Xml,Xpath,Tree,Wms,问题是,我从一个对WMS服务器的get请求中得到一个“application/xml”响应,然后使用DOMParser().parseFromString()方法使用XPath表达式进行解析。我尝试了不同的解决方案,如专用库,但我发现了XPath表达式,现在我需要帮助编写XPath表达式,该表达式将返回XML响应的层标记名称和标题,如下所示 <Layer> <Title>Title Level 1</Title> <Name>Name Level

问题是,我从一个对WMS服务器的get请求中得到一个“application/xml”响应,然后使用DOMParser().parseFromString()方法使用XPath表达式进行解析。我尝试了不同的解决方案,如专用库,但我发现了XPath表达式,现在我需要帮助编写XPath表达式,该表达式将返回XML响应的层标记名称和标题,如下所示

<Layer>
<Title>Title Level 1</Title>
<Name>Name Level 1</Name>
    <Layer>
    <Title>Title Level 2</Title>
    <Name>Name Level 2</Name>
        <Layer>
        <Title>Title Level 3-1</Title>
        <Name>Name Level 3-1</Name>
        </Layer>
        <Layer>
        <Title>Title Level 3-2</Title>
        <Name>Name Level 3-2</Name>
        </Layer>
    </Layer>
</Layer>


您可以在浏览器中使用XSLT 3和Saxon JS 2()将XML转换为JSON:

constxml=`
标题级别1
名称级别1
职称等级2
名称级别2
职称等级3-1
名称级别3-1
职称等级3-2
名称级别3-2
`;
常量xslt=`
{.}
`;
const jsonResult=SaxonJS.XPath.evaluate(`transform(map{'source node':parse xml($xml),'stylesheet text':$xslt,'delivery format':'raw'})?output`,[],{'params':{'xml':xml,'xslt':xslt});
log(jsonResult)

XPath用于查询XML。与其说是构建输出流,不如说是构建输出流。您可以看看xslt。Is使用XPath匹配XML节点,可以输出任何您喜欢的内容。这个答案能给你一个好主意非常感谢你Honnen先生。唯一的问题是,为什么生成的JSON对根的子对象的标题和名称有单独的对象,而不是如何处理根?@YordanRadev,是的,你是对的,我没有注意到第二个示例创建的内部格式不是你需要的格式。我已经更正了上面第二个代码示例的XSLT代码,以构建正确的格式(我希望如此)。再次感谢您,先生,但是XSLT模板返回了一个包含所有内容的大型对象,如果您可以向我解释,如何仅递归地获取层的标题和名称及其子层的数组
{
title: 'Title Level 1'
name: 'Name Level 1'
children: [
    {
     title: 'Title Level 2'
     name: 'Name Level 2'
     children: [
         {
          title: 'Title Level 3-1'
          name: 'Name Level 3-1'
         },
         {
          title: 'Title Level 3-1'
          name: 'Name Level 3-1'
         }
     ]
]
}