Tag: xml

通过任意深度的XPath选择XML节点

有了XML文档,我希望得到第一个具有特定名称的节点,无论它包含哪个嵌套深度。 我尝试了几件事没有成功: var node1 = doc.SelectSingleNode(@”//Shortcut”); var node2 = doc.SelectSingleNode(@”/*/Shortcut”); var node3 = doc.SelectSingleNode(@”//*/Shortcut”); var node4 = doc.SelectSingleNode(@”*/Shortcut”); … 每次调用都会产生一个NULL节点。 我认为它应该是一些简单的XPath语法。 你能帮助我吗? (如果这很重要:XML文档是WiX项目的输入文件,因此可能涉及一些命名空间问题?!?)。 编辑 我也尝试了以下内容: var nsm = new XmlNamespaceManager(doc.NameTable); nsm.AddNamespace(string.Empty, @”http://schemas.microsoft.com/wix/2006/wi”); nsm.AddNamespace(@”ns”, @”http://schemas.microsoft.com/wix/2006/wi”); 和…一起: var node1 = doc.SelectSingleNode(@”//Shortcut”, nsm); var node2 = doc.SelectSingleNode(@”/*/Shortcut”, nsm); var node3 = doc.SelectSingleNode(@”//*/Shortcut”, nsm); var node4 = doc.SelectSingleNode(@”*/Shortcut”, nsm); […]

使用自定义XSLT将XML转换为JSON会丢失花括号

我有一个.NET库,它使用XSLT文件将啤酒xml文件转换为json,用于Web应用程序。 XSLT文件看起来很像这样: { { “description”: { “name”: “”, “style”: “”, … 我正在使用c#中的这段代码进行转换: using(var writer = new StringWriter()){ _xsltCompiler.Transform(_document, null, writer); json = writer.ToString(); } 现在,问题是输出中缺少花括号和空格。 它曾经工作过。 从源代码控制历史中,我最近看不到任何明显的变化。 对于如何解决这个问题,有任何的建议吗?

手动创建要映射到XML请求响应的类

我被指派实现一个使用XML请求/响应的API的接口。 API提供程序不为XML调用提供任何xsd(s)。 我使用xsd.exe生成了C#类:.xml – > .xsd – > .cs但是,我没有发现生成的类令人满意,因为调用包含很多列表,xsd.exe无法正常处理。 我是否应该手动创建并映射到所有请求/响应的类? 这可能有助于以后轻松维护代码。 或者我应该只使用.Net提供的Xml类,并编写方法来创建XML请求/响应? 这将花费更少的时间,但在维护阶段可能会变得艰难。 这是我为相应的XML元素创建的示例类: XML元素 相应的课程 internal class ProductElement : IElement { private const string ElementName = “Product”; private const string IdAttribute = “ID”; private const string DescriptionAttribute = “Description”; private const string NonRefundableAttribute = “NonRefundable”; private const string StartDateAttribute = “StartDate”; private const string […]

使用带有WCF SOAP的XmlSerializer添加根xmlns

我有一个类文件,由我们的客户从第三方提供的XML Schema文档生成。 我应该能够将这个生成的类用于客户的SOAP Web服务,但是我遇到了一些问题。 我已经创建了一个ServiceContract接口,因此我可以使用WCF ChannelFactory连接到Web服务,如下所示: [ServiceContract(Namespace = “http://theircompany.co.uk/theirapp/v1”)] [XmlSerializerFormat] public interface IWebService { [OperationContract] EPSStatus serviceNotifyDataEventSet( [XmlElement(Namespace = “http://www.thirdparty.org/thirdapp”)] DataEventSet dataSet ); } EPSStatus和DataEventSet都在我生成的类文件中。 DataEventSet的重要部分: [System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”, “2.0.50727.42”)] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute(“code”)] [System.Xml.Serialization.XmlTypeAttribute(Namespace=”http://www.thirdparty.org/thirdapp”)] [System.Xml.Serialization.XmlRootAttribute(Namespace=”http://www.thirdparty.org/thirdapp”, IsNullable=false)] public partial class DataEventSet { //… } 当我现在尝试调用IWebService.serviceNotifyDataEventSet我得到以下SOAP主体(在其服务器上启用了WCF跟踪): 47245361157 141728877218 2012-06-28T10:07:57.218+01:00 OSACBM_TIME_MIMOSA 42 0 SITE_SPECIFIC 141728877218 2012-06-28T10:07:57.218+01:00 OSACBM_TIME_MIMOSA 所以,我能够调用Web服务,看起来好像我的数据正确序列化,但是在服务器端, dataSet会出现空值。 我也从一个与以下机构合作的客户端得到了一个跟踪: […]

MSMQ接收和删除

是否有任何选项可以在读取消息后从MSMQ中删除消息? 比如,receive + delete可以作为primefaces操作运行吗?

XML WriteAttributeString错误

当我在这里写这个条目时: 使用此代码: xmlWriter.WriteStartElement(“XmlRoot”); xmlWriter.WriteAttributeString(“xmlns”, “xsi”, null, “http://www.w3.org/2001/XMLSchema-instance”); xmlWriter.WriteAttributeString(“xmlns”, null, null, “urn:nsSBAK”); xmlWriter.WriteAttributeString(“schemaLocation”, null, “urn:nsSBAK SBAK.xsd”); 我收到调试错误: 在同一个start元素标记内,前缀”不能从”重新定义为’urn:nsSBAK’。 你能帮助我吗 ?

为什么我得到这个XML块的org.xml.sax.SAXException?

我已经匿名了一点。 希望它不会减损有用的信息。 stringARRAY是我认为我被抛出的地方,但我不确定,所以如果我看错了地方,lemme就知道了。 来自WSDL 实际方法调用如下所示: string originalValue = “some useful value”; string[] usefulName1 = new[] { originalValue }; service.response[] responses = server.LongishOpName( usefulName1, someString1, someString2 ); 它会将这个XML生成到服务器(感谢Fiddler2): 114003 a string a string 我得到了这个回应 soapenv:Server.userException org.xml.sax.SAXException: Found character data inside an array element while deserializing SERVERNAME 我的肥皂消息真的出现了吗? (是的,我使用ASP.NET Web引用来完成所有提升,我不是手工生成) 我应该做些不同的事吗? 我只需要回家睡觉吗,明天一切都会“正常工作”?

通用Windows平台中的System.Xml.XPath

根据MSDN,System.Xml.XPath中的Extensions类应该可用于通用Windows平台(Windows 10): https://msdn.microsoft.com/en-us/library/system.xml.xpath.extensions(v=vs.110).aspx 但是,在默认配置中,甚至System.Xml.XPath命名空间都不可用。 编译器和IntelliSense找不到它,甚至Resharper也找不到丢失的引用 – 尽管根据MSDN它应该在System.Xml.Linq.dll中。 (我可以毫无问题地使用LINQ) 同样在参考经理中我无法找到合适的assembly体。 通过一些研究,我在NuGet上找到了这个官方的System.Xml.XPath包: https : //www.nuget.org/packages/System.Xml.XPath/ 但是,这不包含Extension类(以及XPathSelectElement扩展方法)。 (但至少是其他XPath类) 我做错了什么或这是文档中的错误,这些类都不适用于Windows 10? 编辑:我已经完成的事情: Visual Studio重启 Windows重启 在另一台计算机上测试

将元素复制并附加到XML文档而不缓冲到RAM

正如标题所示,我需要将日志数据附加到XML文件而不缓冲到RAM。 XML文件由LogEntry元素组成,其中包含82个包含数据的子元素。 这些文件可能变得非常大,因为它将构成Windows CE6程序的一部分,我们的内存非常有限。 完成了大量的研究之后,最明显的方法是使用XDocument或Linq to XML来读取现有文档,然后再附加并写出新文档。 在演唱会中使用XmlWriter和XmlReader似乎是我追加到文件的最佳方式,但到目前为止我的所有尝试都非常不切实际,并且需要IF语句来指示写入内容以防止重复或少数据元素被写入。 我正在做的事情的本质是: //Create an XmlReader to read current WorkLog. using (XmlReader xmlRead = XmlTextReader.Create(“WorkLog.xml”)) { //Create a XmlWriterSettings and set indent //to true to correctly format the document XmlWriterSettings writerSettings = new XmlWriterSettings(); writerSettings.Indent = true; writerSettings.IndentChars = “\t”; //Create a new XmlWriter to output to using (XmlWriter […]

我应该选择哪种格式来请求C#中的API – JSON或XML

我在C#中从REST API请求数据。 API以JSON和XML格式提供相同的数据。 我应该去哪一个? 很清楚我会在JavaScript中选择哪一个。 但在C#中呢? 是否有任何性能优势可以帮助我在C#中选择其中一个或任何良好实践原因? 提前致谢!