簡體   English   中英

從XML文件讀取值

[英]Read the values from XML file

我正在使用XDocument來加載具有此內容的XML文件,我試圖讀取<pjob:job_variables>節點的內容,並為<pjob:job_variables>每個節點獲取名稱和值,因此對於<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_variablesdoc_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();
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM