我有一个XML文件,我想在其中从动态传递名称的节点中提取数据。收到节点名称后,我想用节点名称提取节点的数据,并将其传递给存储过程。以下是我的代码。我从来没有这样做过,所以请你解释一下如何去做。
string yourpath = Environment.CurrentDirectory + @"\DataItemTables.xml";
System.Xml.Linq.XDocument myxml = System.Xml.Linq.XDocument.Load(yourpath);
XmlDocument doc = new XmlDocument();
doc.LoadXml(myxml.ToString());
XmlNodeList xnList = doc.SelectNodes("/abc/Abcd/Segment[@Name='AAA']");
foreach (XmlNode xn in xnList)
{
if (xn.HasChildNodes)
{
foreach (XmlNode item1 in xn.ChildNodes)
{
Console.WriteLine(item1.InnerText);
}
}
}
以下是我的XML
<Tables>
<Table name="Test">
<tablename>TestTable</tablename>
<refTable>NULL</refTable>
<refTableIDColumn>NULL</refTableIDColumn>
</Table>
<Table name="Test">
<tablename>OutlineURL</tablename>
<refTable>TestTable</refTable>
<refTableIDColumn>TestTableID</refTableIDColumn>
</Table>
<Table name="Test">
<tablename>OutlineSummary</tablename>
<refTable>TestTable</refTable>
<refTableIDColumn>TestTableID</refTableIDColumn>
</Table>
<Table name="Test">
<tablename>TestForm</tablename>
<refTable>TestTable</refTable>
<refTableIDColumn>TestTableID</refTableIDColumn>
</Table>
</Tables>
我正在使用谷歌的一些代码。我想读取具有动态传递的名称的节点。从中提取所有数据,并将数据作为XML参数发送到存储过程。
答案 0 :(得分:1)
我仍然不知道你想要达到的目标,但是这段代码可以获得给定节点及其所有子节点的内容:
我更改了您的示例,让“name”属性具有不同的值。我会读到“Test2”:
在变量“dummy”中,您可以检查内容。
string s = "<Tables>" +
"<Table name='Test1'>" +
"<tablename>TestTable</tablename>" +
"<refTable>NULL</refTable>" +
"<refTableIDColumn>NULL</refTableIDColumn>" +
"</Table>" +
"<Table name='Test2'>" +
"<tablename>OutlineURL</tablename>" +
"<refTable>TestTable</refTable>" +
"<refTableIDColumn>TestTableID</refTableIDColumn>" +
"</Table>" +
"<Table name='Test3'>" +
"<tablename>OutlineSummary</tablename>" +
"<refTable>TestTable</refTable>" +
"<refTableIDColumn>TestTableID</refTableIDColumn>" +
"</Table>" +
"<Table name='Test4'>" +
"<tablename>TestForm</tablename>" +
"<refTable>TestTable</refTable>" +
"<refTableIDColumn>TestTableID</refTableIDColumn>" +
"</Table>" +
"</Tables>";
var ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(s)); ;
System.Xml.Linq.XDocument myxml = System.Xml.Linq.XDocument.Load(ms);
XmlDocument doc = new XmlDocument();
doc.LoadXml(myxml.ToString());
XmlNodeList xnList = doc.SelectNodes("/Tables/Table[@name='Test2']");
foreach (XmlNode xn in xnList) {
var dummy = xn.OuterXml;
}
答案 1 :(得分:0)
您可以尝试关注SQL XML query,它会将XML片段解析为表格数据,然后您可以在其上查询
declare @xml xml = N'
<Tables>
<Table name="Test">
<tablename>TestTable</tablename>
<refTable>NULL</refTable>
<refTableIDColumn>NULL</refTableIDColumn>
</Table>
<Table name="Test">
<tablename>OutlineURL</tablename>
<refTable>TestTable</refTable>
<refTableIDColumn>TestTableID</refTableIDColumn>
</Table>
<Table name="Test">
<tablename>OutlineSummary</tablename>
<refTable>TestTable</refTable>
<refTableIDColumn>TestTableID</refTableIDColumn>
</Table>
<Table name="Test">
<tablename>TestForm</tablename>
<refTable>TestTable</refTable>
<refTableIDColumn>TestTableID</refTableIDColumn>
</Table>
</Tables>'
SELECT
[Table].value('tablename[1]','varchar(100)') AS tablename,
[Table].value('refTable[1]','varchar(100)') AS refTable,
[Table].value('refTableIDColumn[1]','varchar(100)') AS refTableIDColumn
FROM @XML.nodes('Tables/Table') TablesList([Table])
我希望它有所帮助,