Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
使用XSLT合并文档不同部分的XML节点_Xslt - Fatal编程技术网

使用XSLT合并文档不同部分的XML节点

使用XSLT合并文档不同部分的XML节点,xslt,Xslt,我是XSL转换的新手。我在这个网站上尝试了其他问题和答案的所有可能选项,但我认为我的情况没有什么独特之处(至少对我来说) 我必须解析下面的xml并构造一个键值对结构作为输出 我的实际xml如下所示 <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema/" xmlns:xsi="http://www.w3.org/2001/

我是XSL转换的新手。我在这个网站上尝试了其他问题和答案的所有可能选项,但我认为我的情况没有什么独特之处(至少对我来说)

我必须解析下面的xml并构造一个键值对结构作为输出

我的实际xml如下所示

<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema/"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance/" xmlns:HNS="http://tempuri.org/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://tempuri.org/">
<SOAP-ENV:Header>
    <ROClientIDHeader SOAP-ENV:mustUnderstand="0" xmlns="http://tempuri.org/">
        <ID>{E931E54B-DA4C-4A93-9BF3-BF82EE028B26}</ID>
    </ROClientIDHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body xmlns:ro="http://tempuri.org/">
    <v1:Response>
        <v1:Result>
            <v1:Fields>
                <v1:TSimpleDataField>
                    <v1:FieldName>COMMENT</v1:FieldName>
                </v1:TSimpleDataField>
                <v1:TSimpleDataField>
                    <v1:FieldName>SITE_TYPE</v1:FieldName>
                </v1:TSimpleDataField>
                <v1:TSimpleDataField>
                    <v1:FieldName>TOTAL_ADDRESSES</v1:FieldName>
                </v1:TSimpleDataField>
            </v1:Fields>
            <v1:Data>
                <v1:TVarArray>
                    <v1:anyType>DQT NLB Dev</v1:anyType>
                    <v1:anyType>62</v1:anyType>
                    <v1:anyType>100</v1:anyType>
                </v1:TVarArray>
            </v1:Data>
        </v1:Result>
    </v1:Response>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

{E931E54B-DA4C-4A93-9BF3-BF82EE028B26}
评论
场地类型
总地址
DQT NLB开发
62
100
我想解析和提取
下的值,并构造一条记录

例如,如果我们从这两个元素中获取一个密钥对值,如下所示

<v1:TSimpleDataField>
    <v1:FieldName>COMMENT</v1:FieldName>
</v1:TSimpleDataField>
<v1:TVarArray>
    <v1:anyType>DQT NLB Dev</v1:anyType>

评论

<v1:TSimpleDataField>
    <v1:FieldName>COMMENT</v1:FieldName>
</v1:TSimpleDataField>
<v1:TVarArray>
    <v1:anyType>DQT NLB Dev</v1:anyType>

DQT NLB开发
我想看到如下的输出

<v1:Response>
  <v1:COMMENT>DQT NLB Dev</v1:COMMENT>
  <v1:SITE_TYPE>62</SITE_TYPE>
  <v1:TOTAL_ADDRESSES>100</v1:TOTAL_ADDRESSES>
</v1:Response>

DQT NLB开发
62
100

编写XSLT从给定的xml中提取数据的最佳方法是什么。任何帮助或建议都将不胜感激。

以下是一个您可以根据需要调整的示例:

XSLT1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:v1="http://tempuri.org/"
exclude-result-prefixes="SOAP-ENV">

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <v1:root>
        <xsl:for-each select="SOAP-ENV:Envelope/SOAP-ENV:Body/v1:Response/v1:Result/v1:Fields/v1:TSimpleDataField">
            <xsl:variable name="i" select="position()" />
            <xsl:element name="v1:{v1:FieldName}">
                <xsl:value-of select="../../v1:Data/v1:TVarArray/v1:anyType[$i]" />
            </xsl:element>
        </xsl:for-each>
    </v1:root>
</xsl:template>     

</xsl:stylesheet>

应用于(已更正的)示例输入,结果为:

<?xml version="1.0" encoding="UTF-8"?>
<v1:root xmlns:v1="http://tempuri.org/">
  <v1:COMMENT>DQT NLB Dev</v1:COMMENT>
  <v1:SITE_TYPE>62</v1:SITE_TYPE>
  <v1:TOTAL_ADDRESSES>100</v1:TOTAL_ADDRESSES>
</v1:root>

DQT NLB开发
62
100

我在这里重复我在注释中提出的警告:如果任何一个
元素包含一个不能用作有效XML元素名称的值,则此操作将失败。

1。您能发布您期望得到的完整输出文档吗?--2.您确定所有字段名都可以用作有效的XML元素名吗?我发现了两个问题-首先,您有3个关键字段,但有4个数据字段。因此,没有明确的一对一映射,其次,xml不能对节点的顺序提供任何基本保证,因此依赖xml实例中的数据位置始终正确可能会成为一个问题。@TomRedfern“xml不能对节点的顺序提供任何基本保证”请再说一遍?@michael.hor257k是的,我同意这还不清楚。我的意思是,任何只按相对顺序(1、2、3等)选择的处理文档节点的策略都是有问题的,因为文档的生成中没有任何固有的内容(这是soap负载)为了保证在多次传递过程中,所述节点的顺序保持不变。@TomRedfern我不知道该文档是如何生成的;然而,一旦生成,节点的顺序是确定的和权威的。否则每个HTML表都不可靠…这是完美的。非常感谢您的快速回复。@KiranKumarBasavaraju如果您的问题得到了回答,请通过接受答案来结束。