Tag: xml

无效的URI:Uri字符串太长

我正在尝试获取模式并validation我的xml。 XmlReaderSetting settings = new System.Xml.XmlReaderSettings(); settings.Schemas.Add(null, “http://example.com/myschema.xsd”); settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler); settings.ValidationType = ValidationType.Schema; settings.IgnoreWhitespace = false; XmlReader reader = XmlReader.Create(xml, settings); 我明白了 Invalid URI: The Uri string is too long System.UriFormatException was unhandled Message=Invalid URI: The Uri string is too long. Source=System StackTrace: at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind) at System.Uri..ctor(String uriString, […]

比较XML文件是否相同的最佳方法是什么?

我正在使用.NET 2.0,最近的代码更改使我之前的Assert.AreEqual调用失效(它比较了两个XML字符串)。 在新的代码库中,只有一个XML元素实际上是不同的,所以我希望对所有其他元素进行比较会得到我想要的结果。 比较需要以编程方式完成,因为它是unit testing的一部分。 起初,我正在考虑使用几个XmlDocument实例。 但后来我发现了这个: http : //drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/05/06/comparing-xml-files.aspx 看起来它可能会起作用,但我对Stack Overflow反馈很感兴趣,以防有更好的方法。 如果可能的话,我想避免为此添加另一个依赖项。 类似的问题 NUnit是否有XML断言? 你会如何比较两个XML文档?

内置.NET函数,用于在XML流中转义字符?

所以,我有一些以下forms的数据: <foo><bar>test</bar></foo> 我希望使用哪些.NET类/函数将其转换为漂亮的东西,然后将其写入文件,如下所示: test 请具体说明函数和类,而不仅仅是“使用System.XML”。 使用XML在.NET中似乎有很多不同的方法:( 谢谢

XDocument保存删除节点前缀

我有一个XML文档(自行开发),其结构如下: UIPTaskId gc8f3715c-4a82-42d2-916c-51515083e7e5 UIPTaskName g359FC555-9CC7-47D4-8ED3-EF973E7D74D7 Responsible Individual Search? g57201da8-62b4-46f2-9329-c71d86f39ffc True 我有一个实用程序来清理XML文档,并使用XDocument加载文件,然后循环通过某些节点并替换值。 完成后,我调用Save方法将文件保存在新位置,经过进一步检查,Save方法在每个节点上删除我的wf前缀。 我怎么能保留这个呢? 难道我做错了什么? 以下是我的代码示例: string wf = “wf”; string wkfl = “C:\\MyFiles\\Temp\\myfile1.rrr”; XDocument xdoc = XDocument.Load(wkfl); XElement variables= xdoc.Descendents(wf + “variables”).Single(); foreach(XElement variable in variables.Elements(wf + “variable”)) { XElement name = variable.Element(wf + “name”); name.Value = name.Value + “_MODIFIED”; } xdoc.Save(wkfl.Replace(“\\Temp\\”, “\\Modified\\”)); Save方法生成以下XML: UIPTaskId […]

替换Xml节点/元素的innertext

首先,这是C#。 我正在为NHS中的一小组同事创建一个互联网仪表板。 下面是一个示例xml文件,我需要更改其中的innertext。 我需要替换特定元素,例如“Workshop1”。 因为我们有一些研讨会,所以我不能使用通用编写器,因为它将使用下面的一段代码替换XML文档中的所有信息。 hello www.google.co.uk 我正在使用一个开关盒来选择一个特定的工作室,您可以在其中更改名称并添加研讨会的URL,使用下面的代码将替换整个文档。 public void XMLW() { XmlTextReader reader = new XmlTextReader(“C:\\myXmFile.xml”); XmlDocument doc = new XmlDocument(); switch (comboBox1.Text) { case “button1”: doc.Load(reader); //Assuming reader is your XmlReader doc.SelectSingleNode(“buttons/workshop1″).InnerText = textBox1.Text; reader.Close(); doc.Save(@”C:\myXmFile.xml”); break; } } 所以只是为了澄清我希望我的C#程序搜索XML文档找到元素“Workshop1”并用文本框中的文本替换innertext。 并且能够保存它而无需用一个节点替换整个文档。 谢谢你的期待。

XML Serialize boolean为0和1

XML Schema Part 2指定定义为boolean的数据类型的实例可以具有以下合法文字{true,false,1,0}。 例如,在反序列化时,以下XML将布尔属性“Emulate”设置为true 。 1 但是,当我将对象序列化回XML时,我得到的是true而不是数值。 我的问题是,有没有办法可以控制XML中的布尔表示?

读取非常大的.xml.bz2文件

我想在不提取整个文件或执行任何XMLvalidation的情况下解析维基媒体的.xml.bzip2转储: var filename = “enwiki-20160820-pages-articles.xml.bz2”; var settings = new XmlReaderSettings() { ValidationType = ValidationType.None, ConformanceLevel = ConformanceLevel.Auto // Fragment ? }; using (var stream = File.Open(filename, FileMode.Open)) using (var bz2 = new BZip2InputStream(stream)) using (var xml = XmlTextReader.Create(bz2, settings)) { xml.ReadToFollowing(“page”); // … } BZip2InputStream工作 – 如果我使用StreamReader ,我可以逐行读取XML。 但是当我使用XmlTextReader ,它在我尝试执行读取时失败: System.Xml.XmlException:’发生了意外的文件结束。 以下元素未关闭:mediawiki。 第58行,第1位。’ bzip流不在 EOF。 […]

如何强制XDocument在声明行中输出“UTF-8”?

以下代码生成此输出: Jim Smith 如何让它生成encoding=”utf-8″而不是encoding=”utf-16″ ? using System; using System.Collections.Generic; using System.IO; using System.Xml.Linq; namespace test_xml2 { class Program { static void Main(string[] args) { List customers = new List { new Customer {FirstName=”Jim”, LastName=”Smith”, Age=27}, new Customer {FirstName=”Hank”, LastName=”Moore”, Age=28}, new Customer {FirstName=”Jay”, LastName=”Smythe”, Age=44}, new Customer {FirstName=”Angie”, LastName=”Thompson”, Age=25}, new Customer {FirstName=”Sarah”, LastName=”Conners”, Age=66} […]

将字符串转换为变量名称

我有一个XML文件,我有一个节点,我读了所有ChildNodes。 childNode的名称与我必须使用此childNode的值设置的变量匹配。 在循环中,我想设置: myvar1到MyValue1 myvar2到MyValue2 C#代码: protected string myvar1; protected string myvar2; XML内容如下所示: MyValue1 MyValue2 C#设置变量: foreach (var item in xmlParamInstallation.SelectNodes(“parameters”)[0].ChildNodes) { ?????? } 任何的想法 ? 谢谢, 更新1:循环中的值“field”始终为null。 public class ParametersTest { public string myvar1 { get; set; } public string myvar2 {get; set;} } var type = typeof(ParametersTest); foreach (XmlNode item in xmlParamInstallation.SelectNodes(“parameters”)[0].ChildNodes) { […]

如何使用Linq XML强制显式标记关闭?

这与以下问题相同: 使用System.Xml.Linq命名空间的显式元素关闭标记 但我使用Net 4.0,答案不再适用。 问题是我保存标签没有真正的值,我的输出XML看起来像这样: 但我需要的是始终打开和关闭标签,即 问题 :怎么做? 编辑 1 添加空节点: if (field_xml == null) // always true, because I create the file for the first time { field_xml = new XElement(XMLKeys.field,String.Empty); table_xml.Add(field_xml); } field_xml.SetAttributeValue(XMLKeys.name, field_info.Name); // … setting some other attributes of this node 然后,保存xml: var writer = new FullEndingXmlTextWriter(parameters.OutputFilename, Encoding.UTF8); root_xml.Save(writer); FullEndingXmlTextWriter是Evil Greebo指出的专门类(它应该强制显式关闭标记)。