我正在尝试将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")不退货吗?
谢谢!
在Java中使用JAXB很容易从xml模式文件生成一组Java类,符合该模式的xml可以反序列化.
是否有一些C#相当于JAXB?我知道Linq可以对xml文件进行序列化和反序列化.但是如何从xml模式文件生成C#类,然后将这些类与linq一起使用?
由于某种原因,以下代码生成不包含声明的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) 我有以下代码:
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) 我需要将以下属性添加到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添加不起作用因为":"而且我肯定不是正确的方法.我如何在那里添加这些?
当您创建新的XDocument使用时XDocument.Load,它是打开XML文件并保留本地副本,还是连续从硬盘驱动器读取文档?如果它连续读取,是否有更快的方法来解析XML?
XDocument x = XDocument.Load("file.xml");
Run Code Online (Sandbox Code Playgroud) 我尝试从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属性时,为什么会出现问题?
这是我的实体类,包含一个实体:
[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) 我试图加载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) 我试图从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) linq-to-xml ×10
c# ×6
xml ×5
.net ×4
linq ×2
encoding ×1
jaxb ×1
silverlight ×1
wcf-binding ×1