我正在接收包含嵌入式xhtml的xml。
我想将DocBody元素作为包含所有xhtml的字符串返回,但不知道xhtml是如何包含在xml中的。我还没有看到很多如何做到这一点的例子。
我通过API收到此结果,因此无法修改XML。
<Documents xmlns="http://mycompany.com/api/v2" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Document>
<Content i:type="CreditAnalystNote">
<DocBody>
<xhtml>
<p>
Paragrah 1 html.
</p>
<p>
Paragrah 2 html.
</p>
<p>
Paragrah 3 html.
</p>
<p>
Paragrah 4 html.
</p>
</xhtml>
</DocBody>
</Content>
</Document>
</Documents>
我用来反序列化XML的类如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml.Serialization;
namespace Corporate
{
[Serializable]
[XmlRoot(ElementName = "Documents", Namespace = "http://cms.mycompany.com/api/v2")]
public class RPSShareclassDocuments
{
[XmlElement(ElementName = "Document")]
public List<ShareClassDocumentData> DocumentData { get; set; }
}
[Serializable]
public class ShareClassDocumentData
{
[XmlElement("Content")]
public DocumentShareClassData CreditNote { get; set; }
}
[XmlType("CreditAnalystNote")]
public class DocumentShareClassData
{
[XmlElement]
public string DocBody { get; set; }
}
}
我正在尝试使用以下内容反序列化文本:
XDocument xDocResult = new XDocument();
xDocResult = ... (gets content into an XDocument)
IXmlUtils xmlUtility = new XmlUtils();
RPSShareclassDocuments document = xmlUtility.Deserialize<RPSShareclassDocuments>(xDocResult);
和反序列化方法是:
public T Deserialize<T>(XDocument doc)
{
string szNamespace = doc.Root.Name.Namespace.NamespaceName;
XmlSerializer serializer = new XmlSerializer(typeof(T), szNamespace);
T result;
using (System.Xml.XmlReader reader = doc.CreateReader())
{
result = (T)serializer.Deserialize(reader);
}
return result;
}
编辑1 我能弄清楚如何从XML中提取XHTML的唯一方法是使用以下代码,尽管这不是我所希望的。
xDocResult = restClient.RestGET(szCurrentSecurityAPI);
XNamespace ns = xDocResult.Root.Name.Namespace.NamespaceName;
XElement xdb = xDocResult.Root.Element(ns + "Document").Element(ns + "Content").Element(ns + "DocBody").Element(ns + "xhtml");
如果有更好的选择,例如直接从XDocument或XSLT中提取信息,我也会感兴趣。