从 XML 文件中读取值
Read the values from XML file
我正在使用 XDocument
来加载 XML 文件,使用此内容,我正在尝试读取 <pjob:job_variables>
节点内容,并且对于 [=14= 中的每个节点] 获取名称和值,
所以 <pjob:var name="XMLFilePath">E:\PP\REPC.xt</pjob:var>
得到名称 XMLFilePath
和它的值 E:\PP\REPC.xt
<?xml version="1.0"?>
<?P_command version="1.0"?>
<pjob:job_command xmlns:pjob="http://www.pp.com/schemas" name="SubmitJob">
<pjob:job_variables>
<pjob:var name="XMLFilePath">E:\PP\REPC.xt</pjob:var>
<pjob:var name="TSLFilePath">E:\PP\REPC.tl</pjob:var>
<pjob:var name="_sys_BitmapType">jpeg</pjob:var>
.........
</pjob:job_variables>
<pjob:doc_variables>
<pjob:var name="CompanyPhone"/>
<pjob:var name="CompanyWebsite">www.site.com</pjob:var>
.........
</pjob:doc_variables>
</pjob:job_command>
我尝试了很多变化,比如
string name, value = String.Empty;
XDocument doc = XDocument.Load("../assets/packet.xml");
var authors = doc.Descendants("job_variables");
foreach (var node in nodes)
{
name = node.name;
value = node.value;
}
但他没有找到 Descendants
,我该如何实现?
您只需在命名空间前添加 pjob
:
XNamespace ns = "http://www.pp.com/schemas";
XDocument doc = XDocument.Load("../assets/packet.xml");
var authors = doc.Root.Element(ns + "job_variables").Elements();
或使用XName.Get()
方法:
var authors = doc.Root.Element(XName.Get("job_variables", "http://www.pp.com/schemas")).Elements();
这会获取 "job_variables" 元素的所有子元素。
如注释中所述,要获取 job_variables
和 doc_variables
的元素,您甚至不需要通过名称访问元素;只需使用 doc.Root.Elements().Elements()
.
尝试以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XElement job_command = doc.Descendants().Where(x => x.Name.LocalName == "job_command").FirstOrDefault();
XNamespace pjobNs = job_command.GetNamespaceOfPrefix("pjob");
var results = job_command.Descendants(pjobNs + "var").Select(x => new {
name = (string)x.Attribute("name"),
value = (string)x
}).ToList();
}
}
}
我正在使用 XDocument
来加载 XML 文件,使用此内容,我正在尝试读取 <pjob:job_variables>
节点内容,并且对于 [=14= 中的每个节点] 获取名称和值,
所以 <pjob:var name="XMLFilePath">E:\PP\REPC.xt</pjob:var>
得到名称 XMLFilePath
和它的值 E:\PP\REPC.xt
<?xml version="1.0"?>
<?P_command version="1.0"?>
<pjob:job_command xmlns:pjob="http://www.pp.com/schemas" name="SubmitJob">
<pjob:job_variables>
<pjob:var name="XMLFilePath">E:\PP\REPC.xt</pjob:var>
<pjob:var name="TSLFilePath">E:\PP\REPC.tl</pjob:var>
<pjob:var name="_sys_BitmapType">jpeg</pjob:var>
.........
</pjob:job_variables>
<pjob:doc_variables>
<pjob:var name="CompanyPhone"/>
<pjob:var name="CompanyWebsite">www.site.com</pjob:var>
.........
</pjob:doc_variables>
</pjob:job_command>
我尝试了很多变化,比如
string name, value = String.Empty;
XDocument doc = XDocument.Load("../assets/packet.xml");
var authors = doc.Descendants("job_variables");
foreach (var node in nodes)
{
name = node.name;
value = node.value;
}
但他没有找到 Descendants
,我该如何实现?
您只需在命名空间前添加 pjob
:
XNamespace ns = "http://www.pp.com/schemas";
XDocument doc = XDocument.Load("../assets/packet.xml");
var authors = doc.Root.Element(ns + "job_variables").Elements();
或使用XName.Get()
方法:
var authors = doc.Root.Element(XName.Get("job_variables", "http://www.pp.com/schemas")).Elements();
这会获取 "job_variables" 元素的所有子元素。
如注释中所述,要获取 job_variables
和 doc_variables
的元素,您甚至不需要通过名称访问元素;只需使用 doc.Root.Elements().Elements()
.
尝试以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XElement job_command = doc.Descendants().Where(x => x.Name.LocalName == "job_command").FirstOrDefault();
XNamespace pjobNs = job_command.GetNamespaceOfPrefix("pjob");
var results = job_command.Descendants(pjobNs + "var").Select(x => new {
name = (string)x.Attribute("name"),
value = (string)x
}).ToList();
}
}
}