我有一个xml文件,我使用LINQ to XML从中提取html。这是文件的一个示例:
<?xml version="1.0" encoding="utf-8" ?>
<tips>
<tip id="0">
This is the first tip.
</tip>
<tip id="1">
Use <b>Windows Live Writer</b> or <b>Microsoft Word 2007</b> to create and publish content.
</tip>
<tip id="2">
Enter a <b>url</b> into the box to automatically screenshot and index useful webpages.
</tip>
<tip id="3">
Invite your <b>colleagues</b> to the site by entering their email addresses. You can then share the content with them!
</tip>
</tips>
我使用以下查询从文件中提取“提示”:
Tip tip = (from t in tipsXml.Descendants("tip")
where t.Attribute("id").Value == nextTipId.ToString()
select new Tip()
{
TipText= t.Value,
TipId = nextTipId
}).First();
我遇到的问题是Html元素被剥离了。我希望使用像InnerHtml这样的东西代替Value,但这似乎并不存在。
有什么想法吗?
提前全部谢谢,
戴夫
答案 0 :(得分:8)
致电t.ToString()
而非Value
。这将把XML作为字符串返回。您可能希望使用带有SaveOptions的重载来禁用格式化。我现在无法检查,但我怀疑它将包含元素标记(和元素),因此您需要将其删除。
请注意,如果您的HTML不是有效的XML,则最终会得到一个无效的整体XML文件。
XML文件的格式是否完全超出您的控制范围?对任何HTML内部进行XML编码都会更好。
编辑:避免获取外部部分的一种方法可能是做这样的事情(当然是从查询中调用的单独方法):
StringBuilder builder = new StringBuilder();
foreach (XNode node in element.Nodes())
{
builder.Append(node.ToString());
}
通过这种方式,您将获得带有后代和散布文本节点的HTML元素。基本上它相当于InnerXml,我强烈怀疑。
答案 1 :(得分:1)
只需使用string.Concat(tip.Nodes())
即可获取带有html代码的内容
答案 2 :(得分:0)
TipText = t.Value,
XElement.value仅返回元素内部的文本。嵌套元素中的文本 - HTML或其他 - 将不包括在内,当然任何&amp; -entity-references都将以其解码形式出现。
如果您希望将内容作为带有标记的字符串,则可以使用SaveOptions.DisableFormatting调用XElement.ToString()。但请注意,这包括包装&lt;尖端&GT;元素 - 也就是说,在Web浏览器DOM术语中,它是outerHTML而不是innerHTML。要获取innerHTML,您必须将子XElement.Nodes的所有ToString()连接在一起。
答案 3 :(得分:0)
只需使用:
string.Concat(element.Nodes())
使用 HTML 标签获取内容。