对于想了解c#–XmlElement.SelectNodes(..)–什么也找不到..帮忙?的读者,本文将是一篇不可错过的文章,我们将详细介绍c#xmlserializer,并且为您提供关于andro
对于想了解c# – XmlElement.SelectNodes(..) – 什么也找不到..帮忙?的读者,本文将是一篇不可错过的文章,我们将详细介绍c#xmlserializer,并且为您提供关于android studio找不到XmlElement错误、c# – Node.SelectNodes(/ *)和Node.childNodes有什么区别?、c# – XElement Nodes()与Elements()有什么区别?、c# – XmlDocument SelectNodes(Xpath):结果顺序的有价值信息。
本文目录一览:- c# – XmlElement.SelectNodes(..) – 什么也找不到..帮忙?(c#xmlserializer)
- android studio找不到XmlElement错误
- c# – Node.SelectNodes(/ *)和Node.childNodes有什么区别?
- c# – XElement Nodes()与Elements()有什么区别?
- c# – XmlDocument SelectNodes(Xpath):结果顺序
c# – XmlElement.SelectNodes(..) – 什么也找不到..帮忙?(c#xmlserializer)
我有一个看起来像这样的xml文件:
<?xml version="1.0" encoding="utf-8"?> <aaa xmlns="http://blabla.com/xmlschema/v1"> <bbb> <ccc>Foo</ccc> </bbb> <ddd x="y" /> <ddd x="xx" /> <ddd x="z" /> </aaa>
我试图像这样访问元素’ddd’:
var doc = new XmlDocument(); doc.Load("example.xml"); foreach (XmlNode dddNode in doc.DocumentElement.SelectNodes("//ddd")) { // do something Console.WriteLine(dddNode.Attributes["x"].Value); }
在运行时,跳过foreach循环,因为我没有从.SelectNodes方法返回任何节点.我在循环之前打破并查看了InnerXML,看起来很好,我还尝试了各种各样的XPath(比如“// bbb”或“/ aaa / ddd”),但只有“/”似乎没有返回空值.
这个确切的代码之前适用于我,现在它没有.我怀疑aaa标签中的命名空间声明,但我无法弄清楚为什么这会导致问题.或者……你能看到我可能遗失的任何东西吗?
解决方法
var nsmgr = new XmlNamespaceManager(doc.NaMetable); nsmgr.AddNamespace("x","http://blabla.com/xmlschema/v1"); var nodes = doc.DocumentElement.SelectNodes("//x:ddd",nsmgr); // nodes has 3 nodes
注意上面的x是任意的;除了方便之外,x中没有意义.
这(相当不方便)意味着将命名空间(或别名,如上所述)添加到所有xpath表达式中.
android studio找不到XmlElement错误
刚从Javaee转过来,不太熟悉Android Studio。
出现了如题所述的问题,没法识别javax.xml.bind.annotation.XmlElement,可是通过Ctrl+N是能找到这个类的,JDK设置没有问题。(下边有图)
在网上查了也没找到原因,该如何解决?请大家指点,谢过。
c# – Node.SelectNodes(/ *)和Node.childNodes有什么区别?
string XML1 = "<Root><InsertHere></InsertHere></Root>";
string XML2 = "<Root><child1><childnodes>data</childnodes><childnodes>data1</childnodes></child1><child2><childnodes>data</childnodes><childnodes>data1</childnodes></child2></Root>";
在下面提到的两个代码示例中,childNodes的使用不会复制XML2中的所有子节点.只有< child1>正在被复制.
string strXpath = "/Root/InsertHere";
XmlDocument xdxmlChildDoc = new XmlDocument();
XmlDocument ParentDoc = new XmlDocument();
ParentDoc.LoadXml(XML1);
xdxmlChildDoc.LoadXml(XML2);
XmlNode xnNewNode = ParentDoc.ImportNode(xdxmlChildDoc.DocumentElement.SelectSingleNode("/Root"), true);
if (xnNewNode != null)
{
XmlNodeList xnChildNodes = xnNewNode.SelectNodes("/*");
if (xnChildNodes != null)
{
foreach (XmlNode xnNode in xnChildNodes)
{
if (xnNode != null)
{
ParentDoc.DocumentElement.SelectSingleNode(strXpath).AppendChild(xnNode);
}
}
}
}
码2:
if (xnNewNode != null)
{
XmlNodeList xnChildNodes = xnNewNode.ChildNodes;
if (xnChildNodes != null)
{
foreach (XmlNode xnNode in xnChildNodes)
{
if (xnNode != null)
{
ParentDoc.DocumentElement.SelectSingleNode(strXpath).AppendChild(xnNode);
}
}
}
}
执行第一个代码示例后的ParentDoc.OuterXML:
<Root>
<InsertHere>
<child1>
<childnodes>data</childnodes>
<childnodes>data1</childnodes>
</child1>
<child2>
<childnodes>data</childnodes>
<childnodes>data1</childnodes>
</child2>
</InsertHere>
</Root>
执行第二个Code示例后,ParentDoc.OuterXML
<Root>
<InsertHere>
<child1>
<childnodes>data</childnodes>
<childnodes>data1</childnodes>
</child1>
</InsertHere>
</Root>
解决方法:
这是Anders G发布的内容的清除,更多的解释.
我很惊讶foreach在这种情况下不会失败(抛出异常),但是地狱.
在code1中.
1.创建一个新的节点集合
2.选择节点
3.追加到其他节点=>从原始集合中删除,但不删除新创建的集合.
4您要从新集合中删除要添加的节点.
在Code2中
1.引用ORIGINAL节点集合
{child1,child2}
2.将第一节点附加到另一个集合=>将其从原始集合中删除
{}的child2
3.现在当foreach在索引1时,它看到它通过了集合的结尾.并退出.
在更改受迭代影响的集合时,这种情况会发生很多.
但大多数时候,IEnumerator会在发生这种情况时抛出异常.
希望我一切都清楚
c# – XElement Nodes()与Elements()有什么区别?
XContainer.Nodes方法()
按文档顺序返回此元素或文档的子节点的集合.
备注
请注意,内容不包含属性.在LINQ to XML中,属性不被视为树的节点.它们是与元素关联的名称/值对.
XContainer.Elements方法()
按文档顺序返回此元素或文档的子元素的集合.
所以它看起来像Nodes()有一个限制,但那为什么它存在?使用节点()有任何可能的原因或优点吗?
解决方法
XDocument doc = XDocument.Parse("<root><el1 />some text<!-- comment --></root>"); foreach (var node in doc.Root.Nodes()) { Console.WriteLine(node); } foreach (var element in doc.Root.Elements()) { Console.WriteLine(element); }
第二个循环(通过Elements())将只返回一个项目:< el />
然而,第一个循环还将返回文本节点(一些文本)和注释节点(<! - comment - >),因此您可以看到差异.
您可以在XNode类的documentaiton中看到XNode的其他后代.
c# – XmlDocument SelectNodes(Xpath):结果顺序
<?xml version="1.0"?> <!-- A fragment of a book store inventory database --> <bookstore xmlns:bk="urn:samples"> <book genre="novel" publicationdate="1997" bk:ISBN="1-861001-57-8"> <title>Pride And Prejudice</title> </book> <book genre="novel" publicationdate="1992" bk:ISBN="1-861002-30-1"> <title>The Handmaid's Tale</title> </book> <book genre="novel" publicationdate="1991" bk:ISBN="1-861001-57-6"> <title>emma</title> </book> <book genre="novel" publicationdate="1982" bk:ISBN="1-861001-45-3"> <title>Sense and Sensibility</title> </book> </bookstore>
当我使用以下代码选择所有书籍节点时,这些节点将具有哪个顺序?
XmlDocument doc = new XmlDocument(); doc.Load("booksort.xml"); var nodeList =doc.SelectNodes("bookstore/book");
nodelist中项目的顺序是否与xml中的顺序相同?这个订单有保证吗?
解决方法
关于c# – XmlElement.SelectNodes(..) – 什么也找不到..帮忙?和c#xmlserializer的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于android studio找不到XmlElement错误、c# – Node.SelectNodes(/ *)和Node.childNodes有什么区别?、c# – XElement Nodes()与Elements()有什么区别?、c# – XmlDocument SelectNodes(Xpath):结果顺序的相关信息,请在本站寻找。
本文标签: