当前位置: 首页 > 知识库问答 >
问题:

将元素移动到不同的元素中

东郭源
2023-03-14

我有一个xml。我想要元素

<?xml version="1.0"?>
<Container xmlns:ti="http://www.to-increase.com/data/blocks">
  <WarehouseHeader>
    <No>RMA-21001</No>
    <Description>RMA t.b.v. order_id #2</Description>
    <Duedate>17/11/2021</Duedate>
    <Quantity>1</Quantity>
    <WarehouseLine>
      <ItemNo>7890</ItemNo>
      <Description>Radiant Tee-L-Purple</Description>
      <UnitofMeasureCode>PCS</UnitofMeasureCode>
    </WarehouseLine>
  </WarehouseHeader>
  <WarehouseHeader>
    <No>RMA-21003</No>
    <Description>RMA t.b.v. order_id #32</Description>
    <Duedate>02/12/2021</Duedate>
    <Quantity>1</Quantity>
    <WarehouseLine>
      <ItemNo>4560</ItemNo>
      <Description>Strive Shoulder Pack</Description>
      <UnitofMeasureCode>PCS</UnitofMeasureCode>
    </WarehouseLine>
    <Quantity>1</Quantity>
    <WarehouseLine>
      <ItemNo>1234</ItemNo>
      <Description>Driven Backpack</Description>
      <UnitofMeasureCode>PCS</UnitofMeasureCode>
    </WarehouseLine>
  </WarehouseHeader>
</Container>

我可以用foreach实现这一点,但在我的例子中,只有第一个

密码

$xml = simplexml_load_string($output);
$qty = $xml->WarehouseHeader->Quantity;
foreach ($xml->WarehouseHeader as $WarehouseHeader) {
    $child = $WarehouseHeader->WarehouseLine->addChild("Quantity", $qty);
}

echo $xml->asXML();

输出

<?xml version="1.0"?>
<Container xmlns:ti="http://www.to-increase.com/data/blocks">
  <WarehouseHeader>
    <No>RMA-21001</No>
    <Description>RMA t.b.v. order_id #2</Description>
    <Duedate>17/11/2021</Duedate>
    <Quantity>1</Quantity>
    <WarehouseLine>
      <ItemNo>7890</ItemNo>
      <Description>Radiant Tee-L-Purple</Description>
      <UnitofMeasureCode>PCS</UnitofMeasureCode>
    <Quantity>1</Quantity></WarehouseLine>
  </WarehouseHeader>
  <WarehouseHeader>
    <No>RMA-21003</No>
    <Description>RMA t.b.v. order_id #32</Description>
    <Duedate>02/12/2021</Duedate>
    <Quantity>1</Quantity>
    <WarehouseLine>
      <ItemNo>4560</ItemNo>
      <Description>Strive Shoulder Pack</Description>
      <UnitofMeasureCode>PCS</UnitofMeasureCode>
    <Quantity>1</Quantity></WarehouseLine>
    <Quantity>1</Quantity> //next quantities
    <WarehouseLine>
      <ItemNo>1234</ItemNo>
      <Description>Driven Backpack</Description>
      <UnitofMeasureCode>PCS</UnitofMeasureCode>
    </WarehouseLine>
  </WarehouseHeader>
</Container>

应该是---参见

<?xml version="1.0"?>
<Container xmlns:ti="http://www.to-increase.com/data/blocks">
  <WarehouseHeader>
    <No>RMA-21001</No>
    <Description>RMA t.b.v. order_id #2</Description>
    <Duedate>17/11/2021</Duedate>
    <WarehouseLine>
      <ItemNo>7890</ItemNo>
      <Description>Radiant Tee-L-Purple</Description>
      <UnitofMeasureCode>PCS</UnitofMeasureCode>
      <Quantity>1</Quantity>
    </WarehouseLine>
  </WarehouseHeader>
  <WarehouseHeader>
    <No>RMA-21003</No>
    <Description>RMA t.b.v. order_id #32</Description>
    <Duedate>02/12/2021</Duedate>
    <WarehouseLine>
      <ItemNo>4560</ItemNo>
      <Description>Strive Shoulder Pack</Description>
      <UnitofMeasureCode>PCS</UnitofMeasureCode>
      <Quantity>1</Quantity>
    </WarehouseLine>
    <WarehouseLine>
      <ItemNo>1234</ItemNo>
      <Description>Driven Backpack</Description>
      <UnitofMeasureCode>PCS</UnitofMeasureCode>
      <Quantity>1</Quantity>
    </WarehouseLine>
  </WarehouseHeader>
</Container>

共有1个答案

从烈
2023-03-14

下面是基于XSLT的解决方案。

两个XSLT模板正在做需要做的事情:

  1. 在Warehouse Header元素级别上取消Quantity元素。
  2. 将Quantity元素移动到Warehouse Line元素级别。

输入XML

<?xml version="1.0"?>
<Container xmlns:ti="http://www.to-increase.com/data/blocks">
    <WarehouseHeader>
        <No>RMA-21001</No>
        <Description>RMA t.b.v. order_id #2</Description>
        <Duedate>17/11/2021</Duedate>
        <Quantity>1</Quantity>
        <WarehouseLine>
            <ItemNo>7890</ItemNo>
            <Description>Radiant Tee-L-Purple</Description>
            <UnitofMeasureCode>PCS</UnitofMeasureCode>
        </WarehouseLine>
    </WarehouseHeader>
    <WarehouseHeader>
        <No>RMA-21003</No>
        <Description>RMA t.b.v. order_id #32</Description>
        <Duedate>02/12/2021</Duedate>
        <Quantity>1</Quantity>
        <WarehouseLine>
            <ItemNo>4560</ItemNo>
            <Description>Strive Shoulder Pack</Description>
            <UnitofMeasureCode>PCS</UnitofMeasureCode>
        </WarehouseLine>
        <Quantity>8</Quantity>
        <WarehouseLine>
            <ItemNo>1234</ItemNo>
            <Description>Driven Backpack</Description>
            <UnitofMeasureCode>PCS</UnitofMeasureCode>
        </WarehouseLine>
    </WarehouseHeader>
</Container>

XSLT

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ti="http://www.to-increase.com/data/blocks">
    <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/>
    <xsl:strip-space elements="*"/>

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

    <!--supress Quantity-->
    <xsl:template match="WarehouseHeader/Quantity"/>

    <!--bring Quantity from directly above-->
    <xsl:template match="WarehouseLine">
        <xsl:copy>
            <xsl:copy-of select="*"/>
            <xsl:copy-of select="preceding-sibling::Quantity[1]"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

输出XML

<Container xmlns:ti="http://www.to-increase.com/data/blocks">
  <WarehouseHeader>
    <No>RMA-21001</No>
    <Description>RMA t.b.v. order_id #2</Description>
    <Duedate>17/11/2021</Duedate>
    <WarehouseLine>
      <ItemNo>7890</ItemNo>
      <Description>Radiant Tee-L-Purple</Description>
      <UnitofMeasureCode>PCS</UnitofMeasureCode>
      <Quantity>1</Quantity>
    </WarehouseLine>
  </WarehouseHeader>
  <WarehouseHeader>
    <No>RMA-21003</No>
    <Description>RMA t.b.v. order_id #32</Description>
    <Duedate>02/12/2021</Duedate>
    <WarehouseLine>
      <ItemNo>4560</ItemNo>
      <Description>Strive Shoulder Pack</Description>
      <UnitofMeasureCode>PCS</UnitofMeasureCode>
      <Quantity>1</Quantity>
    </WarehouseLine>
    <WarehouseLine>
      <ItemNo>1234</ItemNo>
      <Description>Driven Backpack</Description>
      <UnitofMeasureCode>PCS</UnitofMeasureCode>
      <Quantity>8</Quantity>
    </WarehouseLine>
  </WarehouseHeader>
</Container>
 类似资料:
  • 现在,如果我更改,text元素并没有真正移动到svg元素的开头,而是移动到它下面一行的开头,为什么?有人能解释一下为什么没有按预期工作吗?

  • 问题内容: 我想将一个DIV元素移到另一个元素中。例如,我要移动此对象(包括所有子对象): 到这个: 这样我有: 问题答案: 曾经尝试过普通的JavaScript … 吗?

  • 问题内容: 我想将一个DIV元素移到另一个元素中。例如,我要移动此对象(包括所有子对象): 到这个: 这样我有: 问题答案: 曾经尝试过普通的JavaScript … 吗?

  • 问题内容: 我有一个( 父 )包含另一个( 子 )。Parent是第一个没有特定CSS样式的元素。当我设定 最终结果是我的孩子的顶部仍然与父母对齐。我的父母没有将孩子向下移动10px,而是将其向下移动10px。 我的设定为。 我在这里想念什么? 编辑1 我的父母需要具有严格定义的尺寸,因为它的背景必须从上到下显示(像素完美)。因此,在其上设置垂直边距是 不可行的 。 编辑2 此行为在FF,IE和C

  • 嗨,我有一个问题,我的网站上的动画。我有两个div,一个有100%的高度,如果我悬停在它上面,它会下降2个rems,而这个元素下的所有其他内容也会下降。我该怎么修好它?下面是指向简单示例的链接:jsfiddle null null