gpt4 book ai didi

.net - 使用 linq to xml 读取 CDATA

转载 作者:行者123 更新时间:2023-12-04 07:08:05 25 4
gpt4 key购买 nike

我有以下 xml 文件,似乎无法弄清楚如何获取元素中的值(埋在 CDATA 中)。我正在尝试为此使用 linq to xml。如果有人知道如何将其转换为“产品”对象(假设我们有一个产品对象,其属性与元素名称相同)。提前致谢。

鲍勃

<CNETResponse realm="cnet" version="1.0" xmlns="http://api.cnet.com/rest/v1.0/ns" xmlns:xlink="http://www.w3.org/1999/xlink">
<TechProduct id="33517677">
<Name><![CDATA[Nikon CoolPix L20 (deep red)]]></Name>
<Topic id="1670"></Topic>
<ImageURL width="60"><![CDATA[http://i.i.com.com/cnwk.1d/sc/33517677-2-60-0.gif]]></ImageURL>
</TechProduct>
</CNETResponse>

最佳答案

问题是命名空间 - 例如,类似于:

XNamespace ns = "http://api.cnet.com/rest/v1.0/ns";
XElement techProd = doc.Root.Element(ns + "TechProduct");

Product product = new Product {
Id = (int)techProd.Attribute("id"),
Name = techProd.Element(ns + "Name").Value,
Topic = techProd.Element(ns + "Topic").Value,
TopicId = (int)techProd.Element(ns + "Topic").Attribute("id"),
ImageUrl = techProd.Element(ns + "ImageURL").Value,
ImageWidth = (int)techProd.Element(ns + "ImageURL").Attribute("width"),
};

您可能还喜欢 XmlSerializer - 就像是:
XmlSerializer ser = new XmlSerializer(typeof(CnetResponse));
CnetResponse response = (CnetResponse)ser.Deserialize(new StringReader(xml));
TechProduct product = response.TechProduct;

使用类定义,例如:
[Serializable, XmlRoot("CNETResponse", Namespace = CnetResponse.Namespace)]
public class CnetResponse {
public const string Namespace = "http://api.cnet.com/rest/v1.0/ns";
public TechProduct TechProduct { get; set; }
}
[Serializable, XmlType(Namespace = CnetResponse.Namespace)]
public class TechProduct
{
[XmlAttribute("id")]
public int Id { get; set; }
public string Name {get;set;}
public Topic Topic { get; set; }
[XmlElement("ImageURL")]
public Image Image { get; set; }
}
[Serializable, XmlType(Namespace = CnetResponse.Namespace)]
public class Topic {
[XmlAttribute("id")]
public int Id { get; set; }
[XmlText]
public string Text {get;set;}
}
[Serializable, XmlType(Namespace = CnetResponse.Namespace)]
public class Image {
[XmlAttribute("width")]
public int Width { get; set; }
[XmlText]
public string Url {get;set;}
}

或者,只需通过 xsd.exe 运行 xml使 C# 代码适合:
xsd foo.xml
xsd foo.xsd /classes

关于.net - 使用 linq to xml 读取 CDATA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/809964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com