如何将xelement值以逗号分隔的形式写入另一个xelement
本文关键字:xelement 分隔 另一个 | 更新日期: 2023-09-27 18:27:43
在xslt 1.0中,我想将Delivery Method作为逗号分隔的值写入另一个XElement或变量
<Orders>
<Order>
<Number>1</Number>
<GenerateID>Y</GenerateID>
<DeliveryMethods>
<DeliveryMethod>Postal</DeliveryMethod>
<DeliveryMethod>Mail</DeliveryMethod>
</DeliveryMethods>
<OrderIdentity>1FTHX26FXVEA28985</OrderIdentity>
<Price>100</Price>
<Quantity>5</Quantity>
</Order>
</Orders>
尝试过这个
<xsl:variable name="DeliveryOptions>
<xsl:for-each select="DeliveryMethods/DeliveryMethod">
<xsl:value-of select="DeliveryMethod"/>
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl-variable>
但它不起作用。有什么需要帮忙的吗?
您可以使用以下XSLT将输入转换为输出,用子元素的逗号分隔值替换一个元素:
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="DeliveryMethods">
<allmethods>
<xsl:apply-templates select="DeliveryMethod"/>
</allmethods>
</xsl:template>
<xsl:template match="DeliveryMethod">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:template>
我使用一个模板来匹配DeliveryMethods
元素。在模板中,元素的新名称将写入输出文档
接下来,我将模板应用于DeliveryMethod
元素。
在模板DeliveryMethod
中,当前元素值被写入输出。只要元素的position()不等于last(),就写一个逗号。
在给定的输入中,这个XSLT的输出是:
<Orders> <Order> <Number>1</Number> <GenerateID>Y</GenerateID> <allmethods>Postal,Mail</allmethods> <OrderIdentity>1FTHX26FXVEA28985</OrderIdentity> <Price>100</Price> <Quantity>5</Quantity> </Order> </Orders>
试试这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string xml =
"<Orders>" +
"<Order>" +
"<Number>1</Number>" +
"<GenerateID>Y</GenerateID>" +
"<DeliveryMethods>" +
"<DeliveryMethod>Postal</DeliveryMethod>" +
"<DeliveryMethod>Mail</DeliveryMethod>" +
"</DeliveryMethods>" +
"<OrderIdentity>1FTHX26FXVEA28985</OrderIdentity>" +
"<Price>100</Price>" +
"<Quantity>5</Quantity>" +
"</Order>" +
"</Orders>";
XDocument doc = XDocument.Parse(xml);
XElement deliverMethod = new XElement("DeliveryMethod",string.Join(",",doc.Descendants("DeliveryMethod").Select(x => x.Value).ToArray()));
}
}
}