标签: xmlnode

XML - 如何获取单个节点而不是整个文档中的子节点?

一直在寻找答案,但找不到任何东西 - 我很新,所以也许我没有找到正确的关键词?

这是我正在使用的 XML 示例

<database>
<book>
<title>A</title>
<author>
  <name>1</name>
</author>
</book>
<book>
<title>B</title>
<author>
  <name>2</name>
</author>
<author>
  <name>3</name>
</author>
<author>
  <name>4</name>
</author>
<author>
  <name>5</name>
</author>
</book>
</database>
Run Code Online (Sandbox Code Playgroud)

我尝试使用 C# XMLDocument 获取书籍 A 作者 1,然后获取书籍 B 作者 1、2、3、4、5

到目前为止,我正在使用的代码正在循环遍历所有作者,因此我得到了书 A 作者 1, 2, 3, 4, 5

到目前为止我的代码大致如下

XmlDocument doc = new XmlDocument();
doc.Load("myxmlfile");
XmlNode root = doc.SelectSingleNode("database");
XmlNodeList nodelist = root.SelectNodes("book");

foreach (XmlNode n in nodelist)
        {

XmlNodeList authors = root.SelectNodes(".//author");
book.authorstring = "";
foreach (XmlNode author in authors) …
Run Code Online (Sandbox Code Playgroud)

c# xml xmldocument xmlnode

5
推荐指数
1
解决办法
2万
查看次数

字符串到 xmlNode delphi(或如何将 xml 片段添加到 TXMLDocument)

我有一些包含格式良好的 XML 的文本字符串。

我希望能够(1)将这些字符串转换为IXMLNodes(2)将它们附加到现有的XMLDocument. 最好不声明新的XMLDocument第一个。

这似乎不可能?

有没有什么简单的方法可以完成等效的事情?我最初的想法是使用IXMLNode.XML(string) 属性并插入新字符串。IXMLNode.XML只读则不然。

这是一个例子,如果我在 a 中有以下字符串TStringList

<Property Name="Version" RttiType="tkString"></Property>
<Property Name="ShowSubunit" RttiType="tkBoolean"></Property>
Run Code Online (Sandbox Code Playgroud)

我有以下 XML,已加载到 中TXMLDocument,我如何轻松地将上面的两行附加到下面TXMLDocument

<Program Name="PFOO">
  <Class Name="CFOO">
    <Property Name="DBN" RttiType="tkString"/>
    <Property Name="SDate" RttiType="tkClass" ClassType="TXSDATE">12/30/1899</Property>
    <Property Name="XForm" RttiType="tkEnumeration">xfXML</Property>
    <Property Name="Singleton" RttiType="tkBoolean">True</Property>
  </Class>
</Program>
Run Code Online (Sandbox Code Playgroud)

还有其他(简单)方法可以实现此目的(请不要对 XML 属性进行受保护的黑客攻击)?

谢谢你!

delphi msxml xmlnodelist xmlnode txmldocument

5
推荐指数
1
解决办法
5711
查看次数

如何在C#中获取XML的所有子节点

我有一个这样的 XML 文档:

<Columns>
  <Column>
    <Name>A</Name>
    <Width>100</Width>
  </Column>
</Columns>

<Columns>

</Columns>

<Columns>
  <Column>
    <Name>C</Name>
    <Width>300</Width>
  </Column>
  <Column>
    <Name>C1</Name>
    <Width>310</Width>
  </Column>
</Columns>
Run Code Online (Sandbox Code Playgroud)

我正在获取它们的名称和宽度文本并将它们存储在列表中。

var man = new XmlNamespaceManager(xdoc.NameTable);
man.AddNamespace("ns", "http://schemas.microsoft.com/project");
List <string> lstText = new List<string>();
List <List<string>> lst = new List<List<string>>();
XmlNodeList xnList = xdoc.SelectNodes("/ns:Columns/ns:Column", man);

foreach (XmlNode xn in xnList)
        {
           lstText.Add(xn["Name"].InnerText));
           lstText.Add(xn["Width"].InnerText));
        }
lst.Add(lstText);
Run Code Online (Sandbox Code Playgroud)

所以,我只能得到这些值:A和100​​,C和300。我也想得到C1和310。我怎样才能得到它们?

编辑:有些列没有列,有些列有 1 个或多个列。在此示例中,我的列表有 3 个元素:

lst[0][0] = {A, 100}
lst[1][0] = null
lst[2][0] = {C, 300}, lst[2][1] = {C1, 310}
Run Code Online (Sandbox Code Playgroud)

c# xml xmlnodelist xmlnode

5
推荐指数
1
解决办法
3万
查看次数

如何在camel-context.xml中使用xpath来检查特定节点是否存在

我正在尝试开发基于内容的路由骆驼应用程序.此应用程序将查看文件夹src/data以查看是否存在具有节点的SOAP请求文件<e2d:getOrderDetaiRequest>,然后该文件将被复制到目标/消息中,否则该文件将被复制到目标/其他.

你知道如何使用xpath(或任何其他工具)来检查这个条件(我更喜欢使用camel-context.xml文件)?

这是我的骆驼语境

<route>
        <from uri="file://c:/src/data?noop=true"/>
        <choice>
           <when>
            <xpath>**???????????????????????????**</xpath>
                <to uri="file://c:/target/message"/>
           </when>
           <otherwise>
            <to uri="file://c:/target/other"/>
           </otherwise>
        </choice>
    </route>
Run Code Online (Sandbox Code Playgroud)

这是2个不同SOAP请求的示例

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:e2d="http://www.abc.com/Abc11WS">
   <soapenv:Header/>
   <soapenv:Body>
      <e2d:getOrderDetailRequest>
         <actionCode>1234</actionCode>
      </..>
   </...></...>
Run Code Online (Sandbox Code Playgroud)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:lsr="http://www.abc.com/Abc22WS">
   <soapenv:Header/>
   <soapenv:Body>
      <lsr:getProductDetailsRequest>
           <productId>12345</...>
     </...></...></...>
Run Code Online (Sandbox Code Playgroud)

xpath xmlnode apache-camel

4
推荐指数
1
解决办法
7650
查看次数

如何使用新值更新XML节点?

我的App_Data文件夹里面有一个xml .我需要编辑该xml节点中的值.我试过的是 -

        XmlDocument xDoc = new XmlDocument();
        xDoc.Load(Server.MapPath("~/App_Data/conf.xml.config"));

        XmlNodeList aNodes = xDoc.SelectNodes("/ConfigInf");
        foreach (XmlNode node in aNodes)
        {
            XmlNode child1 = node.SelectSingleNode("Node1");
            XmlNode child2 = node.SelectSingleNode("Node2");              

            child1.InnerText = "Value1";
            child2.InnerText = "Value2";
        }
Run Code Online (Sandbox Code Playgroud)

我需要用新值重新编写xml,因为当我尝试再次访问相同的xml时,它应该包含新值.但是当我访问xml时,我仍然只在我这样调用时得到旧的(初始)值 - Test.LoadConf(Server.MapPath("./App_Data/conf.xml.config"));.如何使用新值或任何替代方法(如使用新值创建新的xml)来写入XML?(因为我只需要在单个页面中访问此xml)

c# xml asp.net xmldocument xmlnode

4
推荐指数
1
解决办法
3万
查看次数

XSLT 函数获取节点的 xpath

我需要一个 XSLT 函数,它将返回到它调用的节点的 xpath。

XML

    <root>
      <node>
        <subnode />
        <subnode />
        <subnode />
      </node>
      <node>
        <subnode>
          <subsubnode >
            <xsl:value-of select="fn:generateXPath()" />
          </subsubnode >
        </subnode>
      </node>
    </root>
Run Code Online (Sandbox Code Playgroud)

XSL

    <xsl:template match="root/node/subnode/sub" >
        <xsl:value-of select="fn:generateXPath()" />
    </xsl:template>

    <xsl:function name="fn:generateXPath" >
      <xsl:for-each select="ancestor::*">
      <xsl:value-of select="name()" />
      </xsl:for-each>
      <xsl:value-of select="name()" /> 
    </xsl:function>
Run Code Online (Sandbox Code Playgroud)

我尝试了上面的函数,但它抛出了一个错误:

XPDY0002:无法在此处选择节点:上下文项未定义

但是当我在命名模板中尝试这个时,我能够得到结果。这可以使用xslt:function.

xslt xpath xmlnode

3
推荐指数
2
解决办法
1万
查看次数

如何使用c#动态更改xml节点的属性

我有一个ac#应用程序,可以将用户的数据保存到xml文档中.我希望能够根据输入不同条件的用户动态更改xml节点的属性到文本框中,并选择保存/覆盖现有文件保存.问题是我不能简单地删除节点并使用new属性重新创建节点,因为节点具有无法删除的子节点.

有没有人有任何想法或建议?

XmlNode.Attributes方法没有提供一种方法,因为我可以告诉它只删除节点的属性并重新分配它.我可能错了.

c# xml xmlnode xml-attribute

3
推荐指数
1
解决办法
1万
查看次数

Minidom:获取所选节点的所有属性?

我以递归方式遍历以下所有节点XML:

def verify_elements_children(root):
    if root.childNodes:
        for node in root.childNodes:
            if node.nodeType == node.ELEMENT_NODE:
               if node.tagName in config_elements_children[node.parentNode.tagName]:
#                  print node.toxml()
                   verify_elements_children(node)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何获取所选的所有属性名称node

python xmlnode minidom python-2.7

3
推荐指数
1
解决办法
4460
查看次数

SQL Server将XML子节点附加到父节点

我需要一个脚本,可以将新的xml子节点插入/附加到预先存在的xml父节点.

--New child nodes
DECLARE @XMLChildData XML
SET @XMLChildData = '
<Persons>
    <Person>
        <Firstname>Gary</Firstname>
        <Surname>Smith</Surname>
        <Telephone>0115547899</Telephone>
        <Address>
            <AddressLine>1 Church Lane</AddressLine>
            <AddressLine>Rosebank</AddressLine>
            <AddressLine>Houghton</AddressLine>
            <AddressLine>South Africa</AddressLine>
        </Address>
    </Person>
    <Person>
        <Firstname>Wayne</Firstname>
        <Surname>Farmey</Surname>
        <Telephone>0117453269</Telephone>
        <Address>
            <AddressLine>51 Oak Street</AddressLine>
            <AddressLine>Rivionia</AddressLine>
            <AddressLine>Sandton</AddressLine>
            <AddressLine>South Africa</AddressLine>
        </Address>
    </Person>
    <Person>
        <Firstname>Mark</Firstname>
        <Surname>Jones</Surname>
        <Telephone>0119854741</Telephone>
        <Address>
            <AddressLine>4 Arum Lane</AddressLine>
            <AddressLine>Glen Hazel</AddressLine>
            <AddressLine>Johannesburg</AddressLine>
            <AddressLine>South Africa</AddressLine>
        </Address>
    </Person>
</Persons>'

--Existing parent node
DECLARE @XMLParentData XML
SET @XMLParentData = '
<Persons>
    <Person>
        <Firstname>Sarah</Firstname>
        <Surname>Gray</Surname>
        <Telephone>0113265874</Telephone>
        <Address>
            <AddressLine>78 Emerl Aveune</AddressLine>
            <AddressLine>Fourways</AddressLine>
            <AddressLine>Sandton</AddressLine>
            <AddressLine>South Africa</AddressLine>
        </Address> …
Run Code Online (Sandbox Code Playgroud)

xml sql-server append xmlnode xml.modify

3
推荐指数
1
解决办法
4964
查看次数

Xml.nodeValue导致"错误的节点类型"错误

class Main extends Sprite 
{

    public function new() 
    {
        super();

        try 
        {
            var xml:Xml = Xml.parse("<count>6</count>");

            trace(xml.nodeType);

            for (x in xml.elementsNamed("count"))
            {
                trace(x.nodeName);
                trace(x.nodeType);
                trace(x.nodeValue);
            }
        } 
        catch (err:Dynamic) 
        {
            trace(err);
            Sys.exit(1);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

输出:

Main.hx:23:6

Main.hx:27:tount

Main.hx:28:0

Main.hx:34:节点类型错误,意外0

我不能完全理解nodeValue财产的运作原则.因此,我无法解决我的问题.这里有什么帮助?

PS我的配置是:Haxe + OpenFL瞄准Neko.

xml haxe exception xmlnode neko

3
推荐指数
1
解决办法
90
查看次数