标签: linq-to-xml

XDocument.Descendants()不返回任何元素

我正在尝试将Silverlight DataGrid绑定到WCF服务调用的结果.我没有看到网格中显示的数据,所以当我浏览调试器时,我注意到XDocument.Descendants()即使在传入有效的元素名称时也没有返回任何元素.这是从服务传回的XML:

<ArrayOfEmployee xmlns="http://schemas.datacontract.org/2004/07/Employees.Entities" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Employee>
    <BirthDate>1953-09-02T00:00:00</BirthDate>
    <EmployeeNumber>10001</EmployeeNumber>
    <FirstName>Georgi</FirstName>
    <Gender>M</Gender>
    <HireDate>1986-06-26T00:00:00</HireDate>
    <LastName>Facello</LastName>
  </Employee>
  <Employee>
    <BirthDate>1964-06-02T00:00:00</BirthDate>
    <EmployeeNumber>10002</EmployeeNumber>
    <FirstName>Bezalel</FirstName>
    <Gender>F</Gender>
    <HireDate>1985-11-21T00:00:00</HireDate>
    <LastName>Simmel</LastName>
  </Employee>
</ArrayOfEmployee>
Run Code Online (Sandbox Code Playgroud)

这里是我用来将结果加载到匿名对象集合中的方法,使用Linq到XMl,然后将集合绑定到网格.

void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs args)
{
    if (args.Error != null) return;
    var xml = XDocument.Parse(args.Result);
    var employees = from e in xml.Descendants("Employee")
                    select new
                    {
                        EmployeeNumber = e.Element("EmployeeNumber").Value,
                        FirstName = e.Element("FirstName").Value,
                        LastName = e.Element("LastName").Value,
                        Birthday = e.Element("BirthDate").Value
                    };
    DataGrid.SelectedIndex = -1;
    DataGrid.ItemsSource = employees;
}
Run Code Online (Sandbox Code Playgroud)

知道为什么xml.Descendants("Employee")不退货吗?

谢谢!

silverlight linq-to-xml wcf-binding

16
推荐指数
1
解决办法
9624
查看次数

C#中的Jaxb等价物

在Java中使用JAXB很容易从xml模式文件生成一组Java类,符合该模式的xml可以反序列化.

是否有一些C#相当于JAXB?我知道Linq可以对xml文件进行序列化和反序列化.但是如何从xml模式文件生成C#类,然后将这些类与linq一起使用?

c# linq jaxb linq-to-xml

16
推荐指数
1
解决办法
2万
查看次数

我的XDeclaration在哪里?

由于某种原因,以下代码生成不包含声明的XML:

        XDocument xDocument = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
            new XElement("project",
                new XAttribute("number", project.ProjectNumber),
                new XElement("store",
                    new XAttribute("number", project.StoreNumber)
                ),

                // User Element
                new XElement("user", 
                    new XAttribute("owner-id", project.OwnerID ?? 0),
                    new XElement("email", new XCData(project.OwnerEmail ?? "")),
                    new XElement("project-name", new XCData(project.ProjectName ?? ""))
                ),

                // Nested Project Element
                new XElement("nested-project", 
                    new XAttribute("version", new Version(1, 0)),
                    new XElement("project", 
                        new XAttribute("version", new Version(1, 0)),
                        xProjectItems = new XElement("project-items")
                    ),
                    new XElement("price-per-part", project.PricePerPart),
                    new XElement("sheet-quantity", project.SheetQuantity),
                    new XElement("edge-length", project.EdgeLength),
                    new XElement("price", project.Price),
                    new XElement("status", …
Run Code Online (Sandbox Code Playgroud)

.net c# xml linq-to-xml

16
推荐指数
1
解决办法
7905
查看次数

为什么我的XDocument在我不想要时保存声明?

我有以下代码:

class Program
{
    static void Main(string[] args)
    {
        using (var stream = File.Create(@"C:\test.xml"))
        {
            var xml =
                new XElement("root",
                    new XElement("subelement1", "1"),
                    new XElement("subelement2", "2"));

            var doc = new XDocument(xml);
            doc.Declaration = null;
            doc.Save(stream);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图在没有xml声明的情况下保存XML,但即使我将声明归零XDocument,它仍然被保存到最终的XML中.

此代码输出:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <subelement1>1</subelement1>
  <subelement2>2</subelement2>
</root>
Run Code Online (Sandbox Code Playgroud)

c# xml linq-to-xml

16
推荐指数
2
解决办法
6992
查看次数

如何在XElement上设置名称空间属性

我需要将以下属性添加到XElement:

<xmlns="http://www.mysite.com/myresource" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mysite.com/myresource TheResource.xsd">
Run Code Online (Sandbox Code Playgroud)

将它们作为XAttribute添加不起作用因为":"而且我肯定不是正确的方法.我如何在那里添加这些?

.net xml linq-to-xml

16
推荐指数
2
解决办法
1万
查看次数

将XML加载到XDocument的最快方法是什么?

当您创建新的XDocument使用时XDocument.Load,它是打开XML文件并保留本地副本,还是连续从硬盘驱动器读取文档?如果它连续读取,是否有更快的方法来解析XML?

XDocument x = XDocument.Load("file.xml");
Run Code Online (Sandbox Code Playgroud)

.net c# xml linq-to-xml

16
推荐指数
2
解决办法
1万
查看次数

使用xmlns属性(命名空间)查询XDocument

我尝试从visual studio*.csproj文件中查询元素.我创建了一个简短的例子来说明问题:

    // Working
    string xml1 = @"<Project ToolsVersion='4.0'>
                      <ItemGroup Label='Usings'>
                        <Reference Include='System' />
                        <Reference Include='System.Xml' />
                      </ItemGroup>
                    </Project>"; 
    // Not working
    string xml2 = @"<Project ToolsVersion='4.0' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
                      <ItemGroup Label='Usings'>
                        <Reference Include='System' />
                        <Reference Include='System.Xml' />
                      </ItemGroup>
                    </Project>";

    XDocument doc = XDocument.Parse(xml2);

    foreach (XElement element in doc.Descendants("ItemGroup"))
    {
        Console.WriteLine(element);
    }
Run Code Online (Sandbox Code Playgroud)

字符串xml1工作正常,xml2不返回任何内容.这些字符串之间的唯一区别是文档根目录中的xmlns属性.

我如何查询包含xmlns属性的文档?当xml文档包含xmlns属性时,为什么会出现问题?

c# xml linq-to-xml

16
推荐指数
2
解决办法
8169
查看次数

Linq到Xml:异常 - ''字符,十六进制值0x20,不能包含在名称中

这是我的实体类,包含一个实体:

[Table(Name = "CLINICAL_ITEM_MASTER")]
public class ClinicalItemMaster
{
    [Column]
    public int CLIENT_INPUT_MHS_ID { get; set; }
    [Column]
    public Guid CLIENT_INPUT_MHS_GUID { get; set; }
    [Column]
    public string ITEM { get; set; }
    [Column]
    public int ITEM_ID { get; set; }
    [Column]
    public string ITEM_NUMBER { get; set; }
    [Column]
    public string CATEGORY { get; set; }
    [Column]
    public string DESCRIPTION { get; set; }       
    [Column]
    public DateTime? CREATE_DTTM { get; set; }
    [Column]
    public DateTime? UPDATE_DTTM { get; set; } …
Run Code Online (Sandbox Code Playgroud)

.net linq entity-framework linq-to-xml

16
推荐指数
2
解决办法
3万
查看次数

无法将XmlReader加载到XDocument中

我试图加载XmlReader到一个XDocument更容易操纵.XML格式正确且有效(我仔细检查过).当我尝试加载它时XDocument,我得到了一个InvalidOperationException

此操作后,XmlReader状态应为EndOfFile.

加载它的代码是

public void ReadXml(System.Xml.XmlReader reader)
{
    var doc = XDocument.Load(reader);
}
Run Code Online (Sandbox Code Playgroud)

我已经包含了导致问题的XML示例.我可以顺利地序列化和反序列化这个类,但不加载它.有任何想法吗?

<?xml version="1.0" encoding="utf-8"?>
<ForestView xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Forest>
 <TreeNodeView>
  <Level>Master</Level>
  <ID>39476b1f-e2f8-4d76-b82e-a5166899ad43</ID>
  <Name>Black Mesa</Name>
  <ServerIPAddress>127.0.0.1</ServerIPAddress>
  <ServerPortNumber>8000</ServerPortNumber>
  <ClientIPAddress>NA</ClientIPAddress>
  <ClientPortNumber>4000</ClientPortNumber>
  <Nodes>
    <Level>Server</Level>
    <NodeID>062c3e03-235d-4d7d-9b60-c6228c9cc89e</NodeID>
    <Name />
    <ServerIPAddress>127.0.0.1</ServerIPAddress>
    <ServerPortNumber>5000</ServerPortNumber>
    <ClientIPAddress>127.0.0.1</ClientIPAddress>
    <ClientPortNumber>4000</ClientPortNumber>
  </Nodes>
  <Nodes>
    <Level>Intermediate</Level>
    <NodeID>9bafdc9e-771e-42cf-8f03-e7e75a67a6d1</NodeID>
    <Name>Jen</Name>
    <ServerIPAddress>127.0.0.1</ServerIPAddress>
    <ServerPortNumber>8001</ServerPortNumber>
    <ClientIPAddress>127.0.0.1</ClientIPAddress>
    <ClientPortNumber>8000</ClientPortNumber>
    <Nodes>
      <Level>Terminal</Level>
      <NodeID>72509141-0ab8-45c1-8042-30afb233b4a8</NodeID>
      <Name>Mary</Name>
      <ServerIPAddress>127.0.0.1</ServerIPAddress>
      <ServerPortNumber>0</ServerPortNumber>
      <ClientIPAddress>127.0.0.1</ClientIPAddress>
      <ClientPortNumber>8001</ClientPortNumber>
    </Nodes>
   </Nodes>
  </TreeNodeView>
 </Forest>
</ForestView>
Run Code Online (Sandbox Code Playgroud)

c# linq-to-xml

15
推荐指数
2
解决办法
7616
查看次数

'',十六进制值0x1F,是无效字符.第1行,第1位

我试图从Web读取一个xml文件,并使用XDocument解析它.它通常工作正常,但有时它给我这一天的错误:

 **' ', hexadecimal value 0x1F, is an invalid character. Line 1, position 1**
Run Code Online (Sandbox Code Playgroud)

我尝试了一些谷歌的解决方案,但他们不适用于VS 2010 Express Windows Phone 7.

有一个解决方案将0x1F字符替换为string.empty,但我的代码返回一个没有replace方法的流.

s = s.Replace(Convert.ToString((byte)0x1F), string.Empty);
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

        void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        using (var reader = new StreamReader(e.Result))
        {
            int[] counter = { 1 };  
            string s = reader.ReadToEnd();
            Stream str = e.Result;
       //     s = s.Replace(Convert.ToString((byte)0x1F), string.Empty);
    //        byte[] str = Convert.FromBase64String(s);
     //       Stream memStream = new MemoryStream(str);
            str.Position = 0;
            XDocument xdoc = XDocument.Load(str);                

            var data = from …
Run Code Online (Sandbox Code Playgroud)

encoding linq-to-xml windows-phone

15
推荐指数
3
解决办法
5万
查看次数