在xslt 1.0中,我想将Delivery Method作为逗号分隔值写入另一个XElement或变量
"ABC"
试过这个
<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>
但它不起作用。任何帮助非常感谢?
答案 0 :(得分:0)
试试这个
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()));
}
}
}
答案 1 :(得分:0)
您可以使用以下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>