Tag: xml

C#XmlDocument SelectNodes

我有一个带有根元素的xml文档,两个子元素,’diagnostic’和’results’。 然后’results’元素具有任意数量的元素,名称为’result’ 当它被加载到XmlDocument中时,很容易导航结构并看到这正是操作的方式。 我可以编写一个递归函数来挑选出所有“结果”元素。 XmlDocument.SelectNodes(“// results”)找到一个节点没问题。 但是,* XmlDocument.SelectNodes(“// results / result”)什么都没找到。 * XmlDocument.SelectNodes(“// result”)什么都没找到。 我和一位同事谈过,他在XmlDocument.SelectNodes中使用Xpath感到很悲伤。 还有其他人遇到过这种问题吗? 有解决方案? XML文件: true 49 47 2579 Kakungulu Cup winners SC Villa face Tanzania’s Simba SC this afternoon at the National stadium in Dar es salaam. “We had a very tiresome journey. The road was so bad and the road […]

什么是编写XML的最快方法

我需要经常创建XML文件,我选择XmlWrite来完成这项工作,我发现它花了很多时间在WriteAttributeString之类的东西上(在某些情况下我需要写很多属性),我的问题是有没有更好的方法来创建xml文件? 提前致谢。

如何在不使用所有子节点中的XNamespace的情况下为子节点创建具有默认命名空间的XElement

我正在尝试使用System.Xml.Linq来创建XHTML文档。 因此,我树中的绝大多数节点都应该使用这个命名空间: http://www.w3.org/1999/xhtml 我可以使用XNamespace轻松地创建作用于此命名空间的XElement节点,如下所示: XNamespace xhtml = “http://www.w3.org/1999/xhtml”; // … new XElement(xhtml + “html”, // … 但是,我不希望在创建HTML节点的所有代码中都提供XNamespace ,并且必须为我创建的每个单独的XElement (和XAttribute )名称添加前缀。 XML文本格式本身考虑了这一要求,并允许使用保留的xmlns属性在后代inheritance的祖先中设置默认命名空间。 我想使用System.Xml.Linq做类似的事情。 这可能吗?

在C#中编写XML – ‘状态Epilog中的Token StartElement将导致无效的XML文档’错误

我正在尝试写入XML文档,从列表的ArrayList中获取数据 for (int i = 0; i < 15; i++) { string headname = (headers[0] as List)[i]; headname.Replace(“&”, “&”); headname.Replace(“”, “>”); headname.Replace(“\””, “"”); headname.Replace(“‘”, “'”); textWriter.WriteStartElement(“MetadataName”, “”); textWriter.WriteString(headname); textWriter.WriteEndElement(); 我遇到的问题是,它经过一次for循环,我得到一个’状态Epilog中的Token StartElement将导致无效的XML文档’错误就行了WriteStartElement,我已经尝试查找如何解决它,并没有真正有任何突破。 谢谢。 已编辑以进行更新。

选择包含特定属性的所有xml节点

我必须选择包含具有特定名称的属性的所有节点。 这是我目前的工作方法。 public List RetrieveValuesForAttribute(string attributeName) { var list = new List(); string xpath = “//*[@Name='” + attributeName + “‘]”; XmlNodeList xmlNodeList = document.SelectNodes(xpath); foreach (XmlNode xmlNode in xmlNodeList) { list.Add(xmlNode.Attributes[attributeName].InnerText); } return list; } 我尝试选择包含具有方法参数attributeName给出的名称的属性的所有节点,并将值添加到变量list 。 例: 这个方法调用: List result = RetrieveValuesForAttribute(“itemSelectedHandler”); 应返回包含字符串“OnSelectedRelatedContactChanged”的列表 这是xml文件: 0 false 0 false 0 true 进一步的问题:用LINQ解决这个问题会更好吗? 解决方案1:谢谢你,嗯 public List […]

如何在使用XmlSerializer保留内容的同时更改根元素名称?

我有一个XML文档: Element 1 Element 2 Element 3 我需要反序列化为一个序列化为不同根名称的对象,其他所有内容保持不变。 例如: Element 1 Element 2 Element 3 在序列化时,我们总是可以应用XmlRootAttribute序列化到不同的根名称,但我不确定如何反序列化到不同的XmlRootAttribute 。 它error in document (1,2)指向root属性的error in document (1,2)保持失败error in document (1,2) 。 我怎样才能做到这一点?

在C#中使用(IDisposable obj = new …)来编写流中的代码块(例如XML)

我已经开始使用实现IDisposable的类来使用using语句在流中编写块。 这有助于保持正确的嵌套并避免丢失或错误放置的开始/结束部件。 基本上,构造函数写入块的开头(例如打开XML标记),Dispose()结束(例如关闭XML标记)。 示例是下面的UsableXmlElement(它适用于大型XML,因此内存中的LINQ to XML或XmlDocument不是选项)。 但是,这些IDisposable不实现Microsoft推荐的复杂模式,使用Destructor / Finalizer,单独的Dispose(bool)方法和GC.SuppressFinalize()。 Dispose只是简单地写出end元素,就是这样。 这有什么不妥的,或者这是保持元素正确嵌套的好方法吗? class UsableXmlElement : IDisposable { private XmlWriter _xwriter; public UsableXmlElement(string name, XmlWriter xmlWriter) { _xwriter = xmlWriter; _xwriter.WriteStartElement(name); } public void WriteAttribute(string name, T value) { _xwriter.WriteStartAttribute(name); _xwriter.WriteValue(value); _xwriter.WriteEndAttribute(); } public void WriteValue(T value) { _xwriter.WriteValue(value); } public void Dispose() { _xwriter.WriteEndElement(); } } […]

ImportNode创建空xmlns属性

重新代码: var tmpNewNode = xdoc.ImportNode(newNode, true); if (oldNode.ParentNode != null) { oldNode.ParentNode.ReplaceChild(tmpNewNode, oldNode); return true; } 使用空xmlns属性(xmlns =“”)创建tmpNewNode。 有什么建议我怎么能避免呢? 10倍

使用XSD.exe从多个XSD架构生成c#类

我有2个XSD文件。 一个XSD文件可以说ABC.xsd包含属于XML的元素。 另一个XSD文件让我们说XYZ.xsd包含这些元素的定义。 现在在ABC.XSD(包含元素)模式标记以及其他名称空间中,我们也提到了schemalocation 当我执行xsd.exe以生成我的C#类时。 它正在生成类,但缺少XYZ.xsd中的一些定义。 我正在执行 xsd.exe “ABC.xsd” “XYZ.xsd” /c 任何帮助都会有所帮助 编辑1: @Felice,在我的XYZ.xsd中,我有这样的定义 Contact phone or fax number with national or international format. Only numbers are allowed 看到这里定义的模式,它没有出现在C#类中。 任何帮助。 对不起,我是新来的。 谢谢你的回答

LINQ to XML – 如何正确使用XDocument

现在我开始说这确实是一个分配。 然而,我几乎完成了它,直到我遇到了Linq to XML语法。 我有两个类:Track和CD现在作为分配的一部分我创建了一个CD,然后添加了一些轨道。 在搜索了很多完全解释如何从xml到对象的教程之后,我似乎无法使其工作(对象为xml)。 我目前有: //My list of cds List cds = new List(); //Make a new CD and add some tracks to it CD c1 = new CD(“Awake”,”Dream Theater”); Track t1 = new Track(“6:00”, “Dream Theater”, new TimeSpan(00, 05, 31)); Track t2 = new Track(“Caught in a Web”, “Dream Theater”, new TimeSpan(00, […]