Xslt 通过XSL将一种XML格式转换为另一种XML格式

Xslt 通过XSL将一种XML格式转换为另一种XML格式,xslt,xslt-2.0,Xslt,Xslt 2.0,现有的格式是 <A> <B> <C>hello</C> <C>how</C> <C>are</C> <C>you</C> </B> </A> 你好 怎样 是 你 我想把它变成这样 <start> <A> <B> <tag1> hello

现有的格式是

<A>
  <B>
    <C>hello</C>
    <C>how</C>
    <C>are</C>
    <C>you</C> 
  </B>
</A>

你好
怎样
是
你
我想把它变成这样

<start>
  <A>
    <B>
      <tag1> hello </tag1>
      <tag2> hello </tag2>
    </B>
  </A>
  <A>
    <B>
      <tag1> are </tag1>
      <tag2> you </tag2>
    </B>
  </A>
</start>
<LSR_RESP>
    <HDR> 
        <ORD>AAAAA</ORD>   
        <ORD>BBBBB</ORD>  
        <ORD>CCCCC</ORD>   
        <ORD>DDDDD</ORD> 
        <ORD>EEEEE</ORD> 
        <ORD>FFFFF</ORD>
        <ORD>GGGGG</ORD>
        <ORD>RRRRR</ORD>
        <ORD>KKKKK</ORD>
    </HDR>
</LSR_RESP>
<entity>
<r>
  <c>
  <f ID="OrderNumber1">AAAAA</f> 
  <f ID="OrderNumber2">BBBBB</f> 
  <f ID="OrderNumber3">CCCCC</f> 
  <f ID="OrderNumber4">DDDDD</f> 
  <f ID="OrderNumber5">EEEEE</f> 
  <f ID="OrderNumber6">FFFFF</f> 
  <f ID="OrderNumber7">GGGGG</f> 
  </c>
  </r>
  <r>
  <c>
  <f ID="OrderNumber1">RRRRR</f> 
  <f ID="OrderNumber2">KKKKK</f> 
  </c>
  </r>
  </entity>

你好
你好
是
你
现在,此
标记可以出现n次,并且对于每束2个
标记,应创建一个具有相同标记名称的新
标记(请参见tag1和tag2名称在这两种情况下相同)。整个过程是动态的

更新: 我有一个类似这样的动态XML结构

<start>
  <A>
    <B>
      <tag1> hello </tag1>
      <tag2> hello </tag2>
    </B>
  </A>
  <A>
    <B>
      <tag1> are </tag1>
      <tag2> you </tag2>
    </B>
  </A>
</start>
<LSR_RESP>
    <HDR> 
        <ORD>AAAAA</ORD>   
        <ORD>BBBBB</ORD>  
        <ORD>CCCCC</ORD>   
        <ORD>DDDDD</ORD> 
        <ORD>EEEEE</ORD> 
        <ORD>FFFFF</ORD>
        <ORD>GGGGG</ORD>
        <ORD>RRRRR</ORD>
        <ORD>KKKKK</ORD>
    </HDR>
</LSR_RESP>
<entity>
<r>
  <c>
  <f ID="OrderNumber1">AAAAA</f> 
  <f ID="OrderNumber2">BBBBB</f> 
  <f ID="OrderNumber3">CCCCC</f> 
  <f ID="OrderNumber4">DDDDD</f> 
  <f ID="OrderNumber5">EEEEE</f> 
  <f ID="OrderNumber6">FFFFF</f> 
  <f ID="OrderNumber7">GGGGG</f> 
  </c>
  </r>
  <r>
  <c>
  <f ID="OrderNumber1">RRRRR</f> 
  <f ID="OrderNumber2">KKKKK</f> 
  </c>
  </r>
  </entity>

AAAA
BBBBB
CCCCC
DDD
EEEEE
FFFFF
GGGGG
RRR
KKKK
我想通过XSLT将其转换为如下内容

<start>
  <A>
    <B>
      <tag1> hello </tag1>
      <tag2> hello </tag2>
    </B>
  </A>
  <A>
    <B>
      <tag1> are </tag1>
      <tag2> you </tag2>
    </B>
  </A>
</start>
<LSR_RESP>
    <HDR> 
        <ORD>AAAAA</ORD>   
        <ORD>BBBBB</ORD>  
        <ORD>CCCCC</ORD>   
        <ORD>DDDDD</ORD> 
        <ORD>EEEEE</ORD> 
        <ORD>FFFFF</ORD>
        <ORD>GGGGG</ORD>
        <ORD>RRRRR</ORD>
        <ORD>KKKKK</ORD>
    </HDR>
</LSR_RESP>
<entity>
<r>
  <c>
  <f ID="OrderNumber1">AAAAA</f> 
  <f ID="OrderNumber2">BBBBB</f> 
  <f ID="OrderNumber3">CCCCC</f> 
  <f ID="OrderNumber4">DDDDD</f> 
  <f ID="OrderNumber5">EEEEE</f> 
  <f ID="OrderNumber6">FFFFF</f> 
  <f ID="OrderNumber7">GGGGG</f> 
  </c>
  </r>
  <r>
  <c>
  <f ID="OrderNumber1">RRRRR</f> 
  <f ID="OrderNumber2">KKKKK</f> 
  </c>
  </r>
  </entity>

AAAA
BBBBB
CCCCC
DDD
EEEEE
FFFFF
GGGGG
RRR
KKKK
现在,正如您在上面看到的,每个行标记都是通过在7组中获取标记值来创建的。 新标签的名称也将以7为一组重新标注,如“OrderNumber1”到“OrderNumber7”。 该字段可以出现n次,但新结构将以7组的形式形成

像上面的例子一样,有9个标签,因此它形成了2个组,7个组中的一个留下(9-7),即下一个组有2个标签,因此在下一个组中,您只能看到OrderNumber1和OrderNumber2。 如果有10个标签,它将是一组7个,然后是另一组3个。 如果有15个标记,它将是两组7个,然后是另一组1个。

最简单的方法(XSLT 1.0到目前为止已经足够):


另外,由于使用单独的模板和
/
,可能更灵活:


但话说回来,可能这太复杂了,这取决于你的实际数据。关键点是只选择感兴趣的
节点(位于奇数位置的节点),并围绕它们构建其余的转换

两个模板都会导致:

<start>
  <A>
    <B>
      <tag1>hello</tag1>
      <tag2>how</tag2>
    </B>
  </A>
  <A>
    <B>
      <tag1>are</tag1>
      <tag2>you</tag2>
    </B>
  </A>
</start>

你好
怎样
是
你
最简单的方法(XSLT 1.0目前已经足够):


另外,由于使用单独的模板和
/
,可能更灵活:


但话说回来,可能这太复杂了,这取决于你的实际数据。关键点是只选择感兴趣的
节点(位于奇数位置的节点),并围绕它们构建其余的转换

两个模板都会导致:

<start>
  <A>
    <B>
      <tag1>hello</tag1>
      <tag2>how</tag2>
    </B>
  </A>
  <A>
    <B>
      <tag1>are</tag1>
      <tag2>you</tag2>
    </B>
  </A>
</start>

你好
怎样
是
你

这对我来说不清楚,你能给我们你已经有的代码吗?你可能想看看不确定要问什么,也许你正在寻找的是如何使用XSLT转换XML?这对我来说不清楚,你能给我们你已经有的代码吗?你可能想看看也不确定要问什么,也许您正在寻找的是如何使用XSLT转换XML?很高兴知道有人理解XSLT!我希望我是其中之一。很高兴知道有人理解XSLT!我希望我是他们中的一员。