GVKun编程网logo

c# – XmlElement.SelectNodes(..) – 什么也找不到..帮忙?(c#xmlserializer)

2

对于想了解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)

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标签中的命名空间声明,但我无法弄清楚为什么这会导致问题.或者……你能看到我可能遗失的任何东西吗?

解决方法

这是xml命名空间.没有ddd.但是,有x:ddd,其中x是http://blabla.com/xmlschema/v1的别名.您需要使用命名空间进行测试 – 例如:
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错误

android studio找不到XmlElement错误

刚从Javaee转过来,不太熟悉Android Studio。

出现了如题所述的问题,没法识别javax.xml.bind.annotation.XmlElement,可是通过Ctrl+N是能找到这个类的,JDK设置没有问题。(下边有图)

在网上查了也没找到原因,该如何解决?请大家指点,谢过。

c# – Node.SelectNodes(/ *)和Node.childNodes有什么区别?

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()有什么区别?

c# – XElement Nodes()与Elements()有什么区别?

文件说:

XContainer.Nodes方法()
按文档顺序返回此元素或文档的子节点的集合.

备注
请注意,内容不包含属性.在LINQ to XML中,属性不被视为树的节点.它们是与元素关联的名称/值对.

XContainer.Elements方法()
按文档顺序返回此元素或文档的子元素的集合.

所以它看起来像Nodes()有一个限制,但那为什么它存在?使用节点()有任何可能的原因或优点吗?

解决方法

原因很简单:XNode是所有xml“parts”的基类(抽象)类,而XElement只是一个这样的部分(因此XElement是XNode的子类).考虑以下代码:
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):结果顺序

c# – XmlDocument SelectNodes(Xpath):结果顺序

这是来自MSDN的示例xml

<?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中的顺序相同?这个订单有保证吗?

解决方法

是.在反射器中查看它,此方法最终使用XPathNodeIterator,该文档记录为按文档顺序迭代. http://msdn.microsoft.com/en-us/library/1212yhbf.aspx

关于c# – XmlElement.SelectNodes(..) – 什么也找不到..帮忙?c#xmlserializer的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于android studio找不到XmlElement错误、c# – Node.SelectNodes(/ *)和Node.childNodes有什么区别?、c# – XElement Nodes()与Elements()有什么区别?、c# – XmlDocument SelectNodes(Xpath):结果顺序的相关信息,请在本站寻找。

本文标签: