再会,
我正在尝试查询 XML 文档并有以下查询:
XElement root = XElement.Load(@"..\..\Data.xml");
var entries = root.Descendants()
.Where(x => x.Name.LocalName == "Entry")
.ToList();
Console.WriteLine("There are {0} nodes...", entries.Count());
foreach (XElement v in entries)
{
Console.WriteLine(v.Value);
}
Run Code Online (Sandbox Code Playgroud)
这段代码有效,因为它提取了正确数量的 Entry 节点。入口节点如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Database xmlns="http://www.someurl.org/schemas">
<InfoFromRecord>
<BaseData>
<Entry>
<Date>2006-03-08</Date>XD
<Time>09:20:00</Time>
<EnteredBy>DNS</EnteredBy>
<TextEntry>Record 1</TextEntry>
</Entry>
<Entry>
<Date>2006-03-08</Date>
<Time>09:33:00</Time>
<EnteredBy>MW</EnteredBy>
<TextEntry>Record 2</TextEntry>
</Entry>
<Entry>
<Date>2006-03-08</Date>
<Time>08:58:00</Time>
<EnteredBy>BH</EnteredBy>
<TextEntry>Record 3</TextEntry>
</Entry>
</BaseData>
</InfoFromRecord>
</Database>
Run Code Online (Sandbox Code Playgroud)
问题是,我只想提取日期和时间,而不是所有四个字段。
我有一个包含许多数据项的 XDocument。
我有另一个 XDocument,其中包含非常小的数据项集合。较小文档中的数据项在较大文档中的匹配路径上具有相应的元素。
我想要做的是循环遍历较小的文档,对于我发现的每个元素,我想更新较大的文档,以便将其相应的值替换为较小文档的值。
例如,较大的文档:
<Rootelement>
<Desktop>
<A>
<El1 label="original blah" />
</A>
</Desktop>
<Desktop>
<B>
<El2 />
</B>
</Desktop>
<Desktop>
<C>
<El3 label="I'm the label" tooltip="I'm the tooltip" />
</C>
</Desktop>
</Rootelement>
Run Code Online (Sandbox Code Playgroud)
较小的文档:
<Rootelement>
<Desktop>
<C>
<El3 label="The NEW Label" tooltip="The NEW Tooltip" />
</C>
</Desktop>
</Rootelement>
Run Code Online (Sandbox Code Playgroud)
我想取出路径中的元素Rootelement/Desktop/C/El3,并将较大文档中同一路径中的元素替换为较小文档中的元素,因此大文档变为:
<Rootelement>
<Desktop>
<A>
<El1 label="original blah" />
</A>
</Desktop>
<Desktop>
<B>
<El2 />
</B>
</Desktop>
<Desktop>
<C>
<El3 label="The NEW Label" tooltip="The NEW Tooltip" />
</C>
</Desktop>
</Rootelement> …Run Code Online (Sandbox Code Playgroud) 我想阅读以下XML文件:
Words.xml:
<?xml version="1.0" encoding="utf-8" ?>
<words>
<word>Bat</word>
<word>Dog</word>
<word>Car</word>
</words>
Run Code Online (Sandbox Code Playgroud)
..使用XDocument.我不断收到此代码中的"非空白字符无法添加到内容"错误:
XDocument doc = new XDocument("words.xml");
foreach (XElement element in doc.Descendants("word"))
{
Console.WriteLine(element.Value);
}
Run Code Online (Sandbox Code Playgroud) 我有一个来自我正在尝试查询的Web服务的XML文档.但是,我不确定如何在嵌套在其他元素中的元素时查询XML.
这是XML文件的一部分(我没有包含所有内容,因为它是一个长文件):
<response>
<display_location>
<full>London, United Kingdom</full>
<city>London</city>
<state/>
<state_name>United Kingdom</state_name>
<country>UK</country>
<country_iso3166>GB</country_iso3166>
<zip>00000</zip>
<magic>553</magic>
<wmo>03772</wmo>
<latitude>51.47999954</latitude>
<longitude>-0.44999999</longitude>
<elevation>24.00000000</elevation>
</display_location>
<observation_location>
<full>London,</full>
<city>London</city>
<state/>
<country>UK</country>
<country_iso3166>GB</country_iso3166>
<latitude>51.47750092</latitude>
<longitude>-0.46138901</longitude>
<elevation>79 ft</elevation>
</observation_location>
Run Code Online (Sandbox Code Playgroud)
我可以一次查询"一个部分"但我正在从LINQ构造一个对象.例如:
var data = from i in weatherResponse.Descendants("display_location")
select new Forecast
{
DisplayFullName = i.Element("full").Value
};
var data = from i in weatherResponse.Descendants("observation_location")
select new Forecast
{
ObservationFullName = i.Element("full").Value
};
Run Code Online (Sandbox Code Playgroud)
我的"预测"类基本上只是充满了这样的属性:
class Forecast
{
public string DisplayFullName { get; set; };
public string ObservationFullName { get; set; }; …Run Code Online (Sandbox Code Playgroud) 我有以下 xml 字符串
<Folder>
<name></name>
<Placemark>
<name></name>
<description></description>
<styleUrl></styleUrl>
<MultiGeometry>
<Point>
<coordinates></coordinates>
</Point>
<LineString>
<coordinates></coordinates>
<tesselate>1</tesselate>
</LineString>
</MultiGeometry>
</Placemark>
</Folder>
Run Code Online (Sandbox Code Playgroud)
使用 XElement,有没有办法从 xml 字符串中提取Point元素而不必遍历它的父节点?(多几何)
当我遇到它时,我忘记了铸造机制:).那么你能让我再次记住它吗?因为目前看来我不能接受.
我需要从XML文件中选择一些节点(来自Silverlight XAP文件的AppNamespace.xaml,而不是它很重要),但该文件具有命名空间的东西,因此XPath不起作用.我可以浪费大部分时间试用和错误的XmlNamespaceManager的束缚和纪律噩梦,并最终得到无法容忍的脆弱代码,这些代码无法容忍输入文件中的最轻微变化(在生产代码中不是一个好主意),或者我可以使用荒谬的local-name()语法[1].
但是将XPath用作人类可读的查询语言会更方便,可以用来从任意XML文件返回指定的节点或属性值.
那么有没有办法从文件中删除线路噪音?还是我卡住了?Linq-to-XML的迷宫式是否真的是较小的邪恶?
[1]
//*[local-name() = 'Deployment']/*[local-name() = 'Deployment.Parts']/*[local-name() = 'AssemblyPart']/@*[local-name()='Name']
Run Code Online (Sandbox Code Playgroud)
五年之后,除了一些想要使用更强大的东西的纤维外,我对每一种纤维都支持"迷宫般的低能"一词.
我需要如下输出,我该怎么做?
name1
title1
title2
name2
title1
title2
Run Code Online (Sandbox Code Playgroud)
在for循环中,我必须显示标题.这里我使用下面的代码,这意味着我收到以下错误:
'char' does not contain a definition for 'Attribute' and no extension method 'Attribute' accepting a first argument of type 'char' could be found (are you missing a using directive or an assembly reference
如何解决上述错误以及如何在for循环中编写条件以显示标题?
我用过这段代码:
XmlSerializer serializer = new XmlSerializer(typeof(Notchs));
XDocument xmlDoc = XDocument.Parse(dataInXmlFile);
var Categories = (from Category in xmlDoc.Descendants("Category")
select new Notch()
{
name = (string)Category.Attribute("name"),
title = Category.Elements("Articles").Elements("article").ToString()
}).ToList();
foreach(var doc in Categories)
{
foreach(var sec in doc.title)
{ …Run Code Online (Sandbox Code Playgroud) 我的XML看起来如此:
<sensor>
<data>26.7</data>
<data>54.53</data>
<log>false</log>
</sensor>
Run Code Online (Sandbox Code Playgroud)
要检索列表中的数据字段,我使用:
List<string> list = xml.Root.Descendants("sensor").Elements("data").Select(element => element.Value).ToList();
Run Code Online (Sandbox Code Playgroud)
它运作良好.
有时XML看起来像这样(log = true):
<sensor>
<data>26.7</data>
<data>54.53</data>
<log>true</log>
</sensor>
Run Code Online (Sandbox Code Playgroud)
我想忽略这些价值观.我怎样才能做到这一点?
我试过这个:
var lastUser = xml.Element("response").Descendants("sensor")
.First(u => u.Element("data") != null
&& u.Element("log").Value == "false");
Run Code Online (Sandbox Code Playgroud)
但我只能检索当然只有第一个值.
我有以下 xml 数据。
<?xml version="1.0" encoding="utf-8" ?>
<mail>
<id>signUpConfirmation</id>
<subject>Activation</subject>
<body>
Hi, You account is activated \nRegards
</body>
</mail>
Run Code Online (Sandbox Code Playgroud)
我需要<body>根据我传递的 id从标签中读取值。
这是我尝试过的
var xml = File.ReadAllText("C:\\Users\\DELL\\Documents\\Visual Studio 2012\\Projects\\Website\\Website\\Files\\Mails.xml");
var str = XElement.Parse(xml);
var result = from mail in str.Elements("mail")
where (string)mail.Element("id") == "signUpConfirmation"
select (string)mail.Element("body");
log.Debug("mail data:" + result.First());
Run Code Online (Sandbox Code Playgroud)
我得到错误:
序列不包含任何元素。
此外,我还想在同一个查询中访问 id 标签的值。
我正在使用linq到xml.
在这里我们加载xml文件为XDocument.Load("filename.xml").
这是什么XDocument?
我在编辑后将字符串解析为XDocument时出现此错误并保存.但任何人都可以帮我找到错误位置 - 第1行,第10475位.我怎么能得到那个位置?
System.Xml.XmlException:意外的XML声明.XML声明必须是文档中的第一个节点,并且不允许在其前面显示空白字符.第1行,第10475位.
if (storage.FileExists("APPSDATA.xml"))
{
var reader = new StreamReader(new IsolatedStorageFileStream("APPSDATA.xml", FileMode.Open, storage));
string xml = reader.ReadToEnd();
var xdoc = XDocument.Parse(xml);//error here
reader.Close();
Run Code Online (Sandbox Code Playgroud)
XML很大,这是jus的一部分
<?xml version="1.0" encoding="UTF-8"?>
<Ungdungs>
<Ungdung>
<Name>HERE City Lens</Name>
<Id>b0a0ac22-cf9e-45ba-8120-815450e2fd71</Id>
<Path>/Icon/herecitylens.png</Path>
<Version>1.0.0.0</Version>
<Category>HERE</Category>
<Date>Uknown</Date>
</Ungdung>
<Ungdung>
<Name>HERE Transit</Name>
<Id>adfdad16-b54a-4ec3-b11e-66bd691be4e6</Id>
<Path>/Icon/heretransit.png</Path>
<Version>1.0.0.0</Version>
<Category>HERE</Category>
<Date>Uknown</Date>
</Ungdung>
Run Code Online (Sandbox Code Playgroud) 我有一个xdocument.
XDocument xd = new XDocument();
var xdocument = XDocument.Parse(@"<Values>
<Required>
<DisplayItem>rbProvided</DisplayItem>
<MessageId>38</MessageId>
</Required>
</Values>");
Run Code Online (Sandbox Code Playgroud)
现在,我试图检查一个元素是否存在于此,如果不是我需要添加它.这是我正在尝试的代码
if(xd.Descendants().Elements("Monkey") != null)
{ Do this }
Run Code Online (Sandbox Code Playgroud)
它一直告诉我:
Sequence Contains No Elements
Run Code Online (Sandbox Code Playgroud)
如何正确检查现有元素?
linq-to-xml ×13
c# ×12
xml ×8
linq ×4
.net ×3
casting ×1
namespaces ×1
xml-parsing ×1
xname ×1
xpath ×1