运行没有名称空间的link -to- xml操作
本文关键字:-to- xml 操作 link 有名称 空间 运行 | 更新日期: 2023-09-27 17:49:21
在我的一个项目中有很多这样的代码(在我知道如何使用yield return之前):
public EditorialReviewDTO[] GetEditorialReviews(string URL) {
XDocument xml = XDocument.Load(URL);
XNamespace ns = xml.Root.Name.NamespaceName;
List<EditorialReviewDTO> result = new List<EditorialReviewDTO>();
List<XElement> EdRevs = xml.Descendants(ns + "EditorialReview").ToList();
for (int i = 0; i < EdRevs.Count; i++) {
XElement el = EdRevs[i];
result.Add(new EditorialReviewDTO() { Source = XMLHelper.getValue(el, ns, "Source"), Content = Clean(XMLHelper.getValue(el, ns, "Content")) });
}
return result.ToArray();
}
public static string getValue(XElement el, XNamespace ns, string name) {
if (el == null) return String.Empty;
el = el.Descendants(ns + name).FirstOrDefault();
return (el == null) ? String.Empty : el.Value;
}
我的问题是:有没有一种方法来运行这些查询没有必须通过命名空间?是否有一种方法可以说xml.Descendants("EditorialReview")
并使其工作,即使该元素具有附加的名称空间?
不用说,我无法控制返回的XML格式
不,Descendants("EditorialReview")
在没有名称空间中选择具有本地名称EditorialReview
的元素,因此调用不会选择在名称空间中的任何元素。然而,对于您的方法getValue
,您可以消除XNamespace
参数ns
,而使用public static string getValue(XElement el, XName name)
,然后简单地将其称为例如getValue(el, ns + "Source")
。