一直在寻找答案,但找不到任何东西 - 我很新,所以也许我没有找到正确的关键词?
这是我正在使用的 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) 我有一些包含格式良好的 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 属性进行受保护的黑客攻击)?
谢谢你!
我有一个这样的 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) 我正在尝试开发基于内容的路由骆驼应用程序.此应用程序将查看文件夹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) 我的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)
我需要一个 XSLT 函数,它将返回到它调用的节点的 xpath。
<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: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.
我有一个ac#应用程序,可以将用户的数据保存到xml文档中.我希望能够根据输入不同条件的用户动态更改xml节点的属性到文本框中,并选择保存/覆盖现有文件保存.问题是我不能简单地删除节点并使用new属性重新创建节点,因为节点具有无法删除的子节点.
有没有人有任何想法或建议?
XmlNode.Attributes方法没有提供一种方法,因为我可以告诉它只删除节点的属性并重新分配它.我可能错了.
我以递归方式遍历以下所有节点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?
我需要一个脚本,可以将新的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) 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.
xmlnode ×10
xml ×6
c# ×4
xmldocument ×2
xmlnodelist ×2
xpath ×2
apache-camel ×1
append ×1
asp.net ×1
delphi ×1
exception ×1
haxe ×1
minidom ×1
msxml ×1
neko ×1
python ×1
python-2.7 ×1
sql-server ×1
txmldocument ×1
xml.modify ×1
xslt ×1