使用XElement时如何输入文本

时间:2009-02-25 19:51:01

标签: c# html linq

我正在使用新的System.Xml.Linq来创建HTML文档(是的,我知道HtmlDocument,但更喜欢XDocument / XElement类)。我在插入 (或任何其他HTML实体)时遇到问题。我已经尝试过了:

  1. 直接放入文字不起作用,因为&变得int&amp ;. new XElement("h1", "Text to keep together.");

  2. 我尝试使用以下内容解析原始XML,但是barfs出现此错误:

    XElement.Parse( “文本到一起保持。”);

    - >参考未申报的实体'nbsp'。

  3. 尝试第三个如下所示。如果我保存到文件中,只有一个空格, 会丢失。


  4. var X = new XDocument(new XElement("Name", KeepTogether("Hi Mom!")));
    private static XNode KeepTogether(string p)`
    {
        return XElement.Parse("<xml>" + p.Replace(" ", "&#160;") + "</xml>").FirstNode;
    }
    

    我找不到一种方法只是将原始文本推过去而不会被转义。我错过了一些明显的东西吗?

8 个答案:

答案 0 :(得分:15)

  

我找不到一种方法只是将原始文本推过去而不会被转义。

只需将Unicode字符放入&amp; nbsp;直接在文本节点中引用(U + 00A0 NO-BREAK SPACE),然后让串行器担心它是否需要转义到&amp;#160;或不。 (可能不是:如果您使用UTF-8或ISO-8859-1作为页面编码,则可以直接包含该字符,而无需担心将其编码为实体引用或字符引用)。

new XElement("h1", "Text\u00A0to\u00A0keep\u00A0together");

答案 1 :(得分:2)

更换&amp;用## AMP ##这样的标记解决了我的问题。也许不是最漂亮的解决方案,但我在10分钟内为客户做了一个演示,所以......我不在乎:)。

这个想法的主题

答案 2 :(得分:2)

我知道这已经老了,但我找到了一些东西而且我很惊讶!

XElement element = new XElement("name",new XCData("<br /> & etc"));

你去吧! CDATA文本!

答案 3 :(得分:1)

您也可以尝试使用编号实体,他们不需要声明。 与指定实体等同的编号实体&amp; nbsp;是&amp;#160;

答案 4 :(得分:1)

与amp(&amp;),lt(&lt;)等不同,nbsp不是XML的已知实体,因此您需要声明它。 在XML中,例如&安培; XYZ;被视为实体,解析器将引用其值以生成输出。

// the xml, plz remove '.' within xml
string xml = "<xml>test&.n.b.s.p;test</xml>";

// declare nbsp as xml entity and its value is " " in this case.
string declareEntity = "<!DOCTYPE xml [<!ENTITY nbsp \" \">]>";

XElement x = XElement.Parse( declareEntity  + xml );
// output with a space between tests
// <xml>test test</xml>

 // plz remove '.' in the string 
 XElement.Parse("<xml>" + HttpUtility.HtmlEncode("Text&.n.b.s.p;keep everything") + "</xml>");

答案 5 :(得分:1)

如果您将字符复制到其他位置,则可以粘贴该字符。 Viusal工作室允许这样做。 虽然如果你需要这很难做到,但如果你需要任何符号就很容易,例如:

&amp; bull ...只需粘贴•

&安培;哈尔; ...只需粘贴↔

答案 6 :(得分:0)

&amp;nbsp;

答案 7 :(得分:0)

我想出了适合我的这种略显愚蠢的方法: 字符串替换所有&amp;使用## AMP ##存储数据时.... 并在输出上反转该操作。 我将它与XElement SQL列结合使用并进行处理。

此致

尼尔