强制将 XML 字符实体放入 XmlDocument 中

2024-01-28

我有一些如下所示的 XML:

<abc x="{"></abc>

我想强制XmlDocument使用括号的XML字符实体,即:

<abc x="&#123;"></abc>

MSDN 是这样说的:

为了分配属性值 包含实体引用, 用户必须创建一个 XmlAttribute 节点 加上任何 XmlText 和 XmlEntityReference 节点,构建 适当的子树和使用 SetAttributeNode 将其指定为 属性的值。

创建实体引用 http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.createentityreference.aspx听起来很有希望,所以我尝试了这个:

XmlDocument doc = new XmlDocument();
doc.LoadXml("<abc />");
XmlAttribute x = doc.CreateAttribute("x");
x.AppendChild(doc.CreateEntityReference("#123"));
doc.DocumentElement.Attributes.Append(x);

我得到了例外Cannot create an 'EntityReference' node with a name starting with '#'.

CreateEntityReference 不喜欢“#”的任何原因 - 更重要的是如何将字符实体获取到 XmlDocument 的 XML 中?有可能吗?我希望避免 OuterXml 的字符串操作...


你大多不走运。

首先,您正在处理的内容称为“字符引用”,这就是 CreateEntityReference 失败的原因。字符引用存在的唯一原因是提供对给定上下文中非法或难以创建的字符的访问。

定义:字符引用 指的是一个特定的字符 ISO/IEC 10646 字符集,用于 示例一不可直接访问 从可用的输入设备。

(请参阅 XML 规范第 4.1 节 http://www.w3.org/TR/REC-xml/#sec-references)

当 XML 处理器遇到字符引用时,如果在属性值中引用了该字符(也就是说,如果&#xxx格式在属性内部使用),它被设置为“包含”,这意味着查找其值并替换文本。

字符串“AT&amp;T;“扩展为”AT&T;" 剩下的 & 符号是 不被识别为实体引用 分隔符

(请参阅 XML 规范第 4.4 节 http://www.w3.org/TR/REC-xml/#entproc)

这已纳入 XML 规范中,并且 Microsoft XML 堆栈正在执行其需要执行的操作:处理字符引用。

我能看到您做的最好的事情就是看一下这些旧的 XML.com 文章,其中一篇使用 XSL 来禁用输出转义,以便&amp;#123;会变成&#123;在输出中。
http://www.xml.com/pub/a/2001/03/14/trxml10.html http://www.xml.com/pub/a/2001/03/14/trxml10.html

<!DOCTYPE stylesheet [
<!ENTITY ntilde 
"<xsl:text disable-output-escaping='yes'>&amp;ntilde;</xsl:text>">
]>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     version="1.0">

  <xsl:output doctype-system="testOut.dtd"/>

  <xsl:template match="test">
    <testOut>
      The Spanish word for "Spain" is "Espa&ntilde;a".
      <xsl:apply-templates/>
    </testOut>
  </xsl:template>

</xsl:stylesheet>

这个使用 XSL 将特定字符引用转换为其他文本序列(以实现与上一个链接相同的目标)。
http://www.xml.com/lpt/a/1426 http://www.xml.com/lpt/a/1426

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="2.0">

  <xsl:output use-character-maps="cm1"/>

  <xsl:character-map name="cm1">
    <xsl:output-character character="&#160;" string="&amp;nbsp;"/>   
    <xsl:output-character character="&#233;" string="&amp;233;"/> <!-- é -->
    <xsl:output-character character="ô" string="&amp;#244;"/>
    <xsl:output-character character="&#8212;" string="--"/>
  </xsl:character-map>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强制将 XML 字符实体放入 XmlDocument 中 的相关文章

  • 用于在 n LSBits 之后清除 m 位的掩码

    我在一次采访中被问到这个问题 要清除 16 位整数的 n 位之后的 m 位 假设数字是 10010010010100101 清除 LSBit 中 5 位后的三位 之前 1001100111011001 之后 1001100100011001
  • 使用顶点缓冲区对象 (VBO) 渲染 Kinect 点云

    我正在尝试制作一个动态点云可视化工具 使用 Kinect 传感器每帧更新这些点 为了抓取帧 我使用 OpenCV 和 GLUT 来显示 OpenCV API 对于点 xyz 位置返回 640 x 480 float 对于 rgb 颜色数据返
  • 路径不是有效的虚拟路径

    下面的方法采用指向 xml 文件的路径 tree LoadContentFile path 我从本地文件系统传递完整路径 或使用Server MapPath 但每次我总是收到此错误 Path 不是有效的虚拟路径 编辑 我正在使用Teleri
  • 运行WPF应用程序时出错

    该应用程序在制作它的计算机上运行良好 但是当我将其复制到另一台相同的操作系统时 它崩溃并显示以下错误 Problem signature Problem Event Name CLR20r3 Problem Signature 01 vpn
  • 按文件创建日期排序(并枚举)目录列表?

    所以我有这个例程 public static IEnumerable
  • 实体框架 6 - 使用我的 getHashCode()

    这篇文章需要了解一定的背景知识 请耐心等待 我们有一个使用 EF 的 n 层 WPF 应用程序 我们通过 dbContext 将数据从数据库加载到 POCO 类中 dbContext 被销毁 然后用户可以编辑数据 我们使用 Julie Le
  • 如何在 C++ 中创建动态整数数组?

    如何使用 C 创建动态整数数组new关键词 int main int size std cin gt gt size int array new int size delete array return 0 别忘了delete你分配的每个数
  • 编译器之间的重载分辨率不同

    我构建了以下我的问题的最小示例 include
  • Unity C# 嵌套 IEnumerator

    在我的代码中 我嵌套了 IEnumerator 方法 如下所示 private IEnumerator PerformRequest string url Doing stuff UnityWebRequest request UnityW
  • C# 使用正则表达式获取内容内的 html 标签和下一个元素

    这是我的html div class 50f3 Followed by a href https www facebook com zurabj followers 7 583 people a div div class 50f3 Fri
  • 如何使用现代 GCC 抑制“-fpermissive”错误?

    我正在尝试编译一些不合格的代码C 17 https en wikipedia org wiki C 2B 2B17 但我遇到了以下问题 pragma GCC diagnostic push pragma GCC diagnostic ign
  • Boost MPL 生成对象序列化代码?

    我想生成序列化 反序列化代码 class Object string a int b long c char d 通过查看 mpl 序列 但我需要能够识别对象并将其检索回来 我不知道如何获取它的成员的名称 我必须知道吗 代码应该看起来像 v
  • AWS API Gateway 接受内容类型:application/xml

    我有一个关于 AWS API Gateway 的问题 我想将其他公司的 API 处理到我自己的 AWS 中的 dynamoDB 中 他们只能将格式化的 XML 发布到我的 API 我的设置是 API Gateway gt Lambda gt
  • C# 检测关闭应用程序

    我正在尝试创建任务栏替换 并且我想要每个正在运行的应用程序都有一个按钮 public void AddBtn string name Button newButton new Button this Controls Add newButt
  • Makefile:没有规则来制作目标

    我正在关注本指南makefile http www cs colby edu maxwell courses tutorials maketutor 但我根本不理解最后一个例子 并且我无法让我的 makefile 工作 因为我收到了错误ma
  • 处理多个自动重定向的正确方法是什么?

    我有一个网站 基本上允许客户构建一个包含可配置项目的购物车 用户将选择一个项目 系统会提示他们选择他们想要的第一个选项 然后他们将被发送到第二个步骤 在那里他们选择第二个选项 等等 步骤数和选项数是可变的 因为它们是由客户定义的 通常该项目
  • 指向虚拟成员函数的指针。它是如何工作的?

    考虑以下 C 代码 class A public virtual void f 0 int main void A f A f 如果我不得不猜测 我会说 A f 在这种情况下意味着 A 的 f 实现的地址 因为指向常规成员函数和虚拟成员函数
  • 我们如何在Android中动态更改Android应用程序图标[重复]

    这个问题在这里已经有答案了 我知道活动图标也被问过同样的问题 但我的问题有点不同 我只是想知道我们是否可以以编程方式设置应用程序图标 我不是要求更改 我只是要求设置它 我希望我说清楚了
  • C# 中 PHP 的快速解析

    我需要用 C 解析 PHP 文件 我们本质上要求另一个国家的一些开发人员上传 PHP 文件 上传后我们需要检查 php 文件并获取所有方法和类 函数等的列表 我想过使用正则表达式 但我无法确定一个函数是否属于一个类等 所以我想知道是否已经有
  • 删除重复项并将列表放入列表框中

    这是一项大学作业 我对其中的一部分遇到了问题 这是代码 namespace Assignment 1 public partial class Classifier System Web UI Page We are using a web

随机推荐

  • 按下 tkinter 按钮时如何播放声音?

    我正在为 Windows PC 构建一个程序 其中包含很多按钮并且看起来非常简单 所以我想知道 当你按下按钮 使用 tkinter 时 我可以播放声音来让程序活跃一点吗 请记住我正在学习 所以请简单一点 假设您的文件是 WAV from t
  • 实体类型没有定义键

    另一个 实体类型 x 没有定义键 问题 但我已经设置了 Key 属性上的属性所以我有点困惑 这是我的实体和上下文类 namespace DoctorDB Models public class Doctor Key public strin
  • gzip 无法在 Django 中使用 Whitenoise 工作

    我在 Heroku 上部署了一个 Django 网站 使用 Whitenoise 提供静态文件 静态文件工作正常 但根据我用来测试它的各种网站 包括谷歌工具 Gzip 无法工作 这是我的生产设置文件中的代码 DATABASES defaul
  • iPhone:通过蓝牙序列化和发送对象?

    序列化对象并通过蓝牙 或网络连接 发送它的最佳方法是什么 你可以使用gamekit http developer apple com library ios documentation NetworkingInternet Conceptu
  • 绘制从远程服务器下载的图像

    我需要执行以下操作 从服务器下载 PNG 资源 根据状态在该图像上绘制几个具有不同颜色的矩形 在可缩放图像视图中显示该图像 我在使用 Canvas 的 Android 应用程序中有一个工作代码 但我不知道如何使用 Flutter 来做到这一
  • Java中如何让程序等待按钮按下

    现在 我不确定这是否可能 甚至是完成我想要做的事情的最佳方法 但基本上我正在使用一个非常简单的 Swing GUI 创建一个非常简单的模拟程序 每轮模拟结束后 界面上的一些按钮都会启用 供用户进行更改 然后用户可以按 继续 按钮再次开始模拟
  • JPA 继承 - 更改实体类型

    我有两节课 Entity Inheritance strategy InheritanceType SINGLE TABLE DiscriminatorColumn name PERSONTYPE DiscriminatorValue va
  • 草皮遮罩返回没有洞的多边形

    我得到一些奇怪的结果草皮 mask https turfjs org docs mask 这是polygon我正在尝试运行mask 功能 https gist githubusercontent com Stophface 50155878
  • 在参数中运行带引号的命令适用于commands.getoutput(),但不适用于子进程模块

    我正在创建一个 python 程序 它调用许多其他程序和脚本 在 Unix SUNos Linux 上 除了 1 个脚本之外 我在所有地方都使用子进程 我不使用子进程的脚本是一个 perl 脚本 它已被制作成可执行文件 不知何故 它不允许我
  • 4 次矩阵乘法的 np.einsum 性能

    给定以下 3 个矩阵 M np arange 35 37 59 reshape 35 37 59 A np arange 35 51 59 reshape 35 51 59 B np arange 37 51 51 59 reshape 3
  • SqlDataReader 参数不起作用

    我有一个 Windows 窗体 要求用户在 textbox1 中输入 pcname 然后尝试使用SqlDataReader从数据库中读取以获取电脑IP地址 然后将电脑驱动器映射到我的本地电脑 但由于某种原因 当我在 SQL 参数中使用文本框
  • 不要将 --build-id 从 gcc 传递给链接器

    我正在尝试使用以下命令编译嵌入式手臂处理器gcc arm linux gnueabi and nostdlib删除对 c 库和启动文件的依赖关系 该芯片没有任何解释 elf 文件的方法 因此使用objcopy O binary 我可以从中删
  • OpenGL 纹理上传:UNSIGNED_BYTE 与 UNSIGNED_INT_8_8_8_8

    我正在调用 glTexSubImage2D 如果我的像素格式是GL RGBA 然后是像素类型GL UNSIGNED BYTE and GL UNSIGNED INT 8 8 8 8完全等价 另外 这两对等价吗 Format GL RGBA
  • GATT 配置文件和 UART 服务

    我是开发通过蓝牙连接到外围设备的移动应用程序的新手 我搜索到 GATT 是用于蓝牙LE 通信的相关配置文件 但我们的客户建议我们使用 UART 服务 现在我很困惑 1 这两件事是如何关联的 2 我们是否必须选择其中之一 如果是的话 每一个的
  • Excel 条件动态数据验证

    我在使用 Excel 时遇到一个小问题 这是问题定义 我想要下表的条件数据验证 Column 1 Column 2 Y Res1 Y Res2 N Res3 N Res4 Y Res5 从上表中 我需要一个单元格下拉列表 使用数据验证 其中
  • 使用 dplyr 的 mutate 函数返回分组数据框中的相对值

    我正在尝试使用 dplyr 的 mutate 函数创建一个新变量 该变量根据 ifelse 语句的值提取现有变量的相对值 这是我想要实现的目标的一个示例 希望能更好地说明问题 id from date fobs to date a 1999
  • Pandas:如何将多个单元格与列表/元组进行比较

    我需要将数据框中的某些列作为一个整体进行比较 例如 df pd DataFrame A 1 1 3 B 4 5 6 Select condition If df A 1 and df B 4 then pick up this row 对于
  • 如何判断 Froyo 中何时发生配置更改?

    在我的应用程序中 我希望播放一个媒体文件 并且在用户旋转屏幕 破坏 Activity 时继续播放 但如果用户移动到不同的 Activity 或另一个 Activity 出现在该 Activity 上 我希望它停止播放 他们按下后退按钮 无论
  • 如何使一种形式保持在另一种形式之上?

    我已经找到了Form TopMost属性 但它将表单置于所有内容之上 包括不属于我的应用程序的内容 我怀疑我在这里遗漏了一些明显的东西 是Form非模式对话框的正确基类 使用对话框窗体的 Form Owner 属性并将其设置为主窗体 在这里
  • 强制将 XML 字符实体放入 XmlDocument 中

    我有一些如下所示的 XML