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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
如何将字符串xml转换为xml节点XSLT_Xml_Xslt_Xpath - Fatal编程技术网

如何将字符串xml转换为xml节点XSLT

如何将字符串xml转换为xml节点XSLT,xml,xslt,xpath,Xml,Xslt,Xpath,我正在使用Banxico Web服务,它返回一个字符串,该字符串中包含XML 我真正需要的是使用XSLT或XPath提取下一部分 如何使用XSLT或Xpath实现这一点 债务清偿债务的比索 “决定权(FIX)”之外的其他权利 IDSERIE=“SF43718”BANXICO_FREQ=“Dia”BANXICO_FIGURE_TYPE=“TipoCambio” BANXICO_装置类型=“PesoxDoll”> pid=4468,请求ID=4d0ce60a-c92f-441e-87b1-4c

我正在使用Banxico Web服务,它返回一个字符串,该字符串中包含XML

我真正需要的是使用XSLT或XPath提取下一部分

如何使用XSLT或Xpath实现这一点

债务清偿债务的比索 “决定权(FIX)”之外的其他权利 IDSERIE=“SF43718”BANXICO_FREQ=“Dia”BANXICO_FIGURE_TYPE=“TipoCambio” BANXICO_装置类型=“PesoxDoll”>


pid=4468,请求ID=4d0ce60a-c92f-441e-87b1-4c6f12b26574
蒂波斯德坎比奥
假的
假的
坎比奥酒店
2016-12-15 12:26:37.766
墨西哥银行
西斯特马斯德萨罗郊区酒店
(01 55)52372678
更新
2016-12-15 12:26:37.766
]]>
通过这个响应,我构建了一个xsd模式

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.banxico.org.mx/structure/key_families/dgie/sie/series/compact" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="DataSet">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="SiblingGroup">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute type="xs:string" name="BANXICO_FREQ"/>
                <xs:attribute type="xs:duration" name="TIME_FORMAT"/>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="Series" maxOccurs="unbounded" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Obs">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string">
                      <xs:attribute type="xs:date" name="TIME_PERIOD" use="optional"/>
                      <xs:attribute type="xs:float" name="OBS_VALUE" use="optional"/>
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute type="xs:string" name="TITULO" use="optional"/>
            <xs:attribute type="xs:string" name="IDSERIE" use="optional"/>
            <xs:attribute type="xs:string" name="BANXICO_FREQ" use="optional"/>
            <xs:attribute type="xs:string" name="BANXICO_FIGURE_TYPE" use="optional"/>
            <xs:attribute type="xs:string" name="BANXICO_UNIT_TYPE" use="optional"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

要运行XSL转换来提取所需信息,不需要生成模式

如果您可以使用XPath 3函数,那么您可以一次完成所有这一切:XPath 3包含一个函数,用于解析字符串并将其转换为逻辑XML树,从而允许您针对该字符串运行XPath表达式

如果不能使用XPath 3函数,则需要分两步执行:仅将
文本内容(要进一步处理的XML响应)导出到单独的文件,然后加载该文件并对其运行另一个转换以提取所需内容

下面是一个快速而肮脏的示例,说明如何使用XPath 3一次性处理此问题


使用上面的XML作为输入,此XSL生成以下结果(缩进以便于人类识别):



我建议使用JSON API而不是旧的soap服务。

您可以使用哪个版本的XSLT或XPath?由于内部XML作为CDATA节转义,您需要两个解析步骤,如果您想在纯XSLT或XPath中实现这一点,那么您需要XSLT/XPath 3.0或支持解析XML扩展的实现。
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.banxico.org.mx/structure/key_families/dgie/sie/series/compact" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="DataSet">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="SiblingGroup">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute type="xs:string" name="BANXICO_FREQ"/>
                <xs:attribute type="xs:duration" name="TIME_FORMAT"/>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="Series" maxOccurs="unbounded" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Obs">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string">
                      <xs:attribute type="xs:date" name="TIME_PERIOD" use="optional"/>
                      <xs:attribute type="xs:float" name="OBS_VALUE" use="optional"/>
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute type="xs:string" name="TITULO" use="optional"/>
            <xs:attribute type="xs:string" name="IDSERIE" use="optional"/>
            <xs:attribute type="xs:string" name="BANXICO_FREQ" use="optional"/>
            <xs:attribute type="xs:string" name="BANXICO_FIGURE_TYPE" use="optional"/>
            <xs:attribute type="xs:string" name="BANXICO_UNIT_TYPE" use="optional"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>