5

我有一个 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,但这似乎并不存在。

有任何想法吗?

提前谢谢大家,

戴夫

4

4 回答 4

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,我强烈怀疑。

于 2009-01-19T15:36:08.293 回答
1

只需用于string.Concat(tip.Nodes()) 获取带有 html 标签的内容

于 2011-02-24T09:43:23.387 回答
0

TipText=t.Value,

XElement.value仅返回直接位于元素内部的文本。嵌套元素中的文本 - HTML 或其他 - 将不包括在内,当然任何 &-entity-references 都将以解码后的形式出现。

如果您希望内容作为带有标记的字符串,您可以调用 XElement.ToString(),可能使用 SaveOptions.DisableFormatting。但请注意,这包括包装 <tip> 元素 - 也就是说,在 Web 浏览器 DOM 术语中,它是 outerHTML 而不是 innerHTML。要获得 innerHTML,您必须将子 XElement.Nodes 的所有 ToString() 连接在一起。

于 2009-01-19T15:51:51.290 回答
0

只需使用:

string.Concat(element.Nodes()) 

获取带有HTML标签的内容。

于 2019-01-25T15:38:31.420 回答