首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#读取xml文件,该文件使用名称前缀,但不定义文档本身中的命名空间

C#读取xml文件,该文件使用名称前缀,但不定义文档本身中的命名空间
EN

Stack Overflow用户
提问于 2019-05-21 04:45:24
回答 1查看 364关注 0票数 1

我有一个来自客户端的xml文件。它使用多个节点的名称前缀。但是它没有在文档中定义任何名称空间。以下是一个样本:

代码语言:javascript
运行
复制
<?xml version="1.0"?>
<SemiconductorTestDataNotification>
  <ssdh:DocumentHeader>
    <ssdh:DocumentInformation>
      <ssdh:Creation>2019-03-16T13:49:23</ssdh:Creation>
    </ssdh:DocumentInformation>
  </ssdh:DocumentHeader>
  <LotReport>
    <BALocation>
      <dm:ProprietaryLabel>ABCDEF</dm:ProprietaryLabel>
    </BALocation>
  </LotReport>
</SemiconductorTestDataNotification>

我使用以下xml类来读取它,但失败了。

代码语言:javascript
运行
复制
System.Xml.Linq.XElement
System.Xml.XmlDocument
System.Xml.XmlReader
System.Xml.Linq.XDocument

它会产生错误:

‘'ssdh’是一个未声明的前缀。

我知道名称空间的前缀。这些措施将是:

代码语言:javascript
运行
复制
xmlns:ssdh="urn:rosettanet:specification:system:StandardDocumentHeader:xsd:schema:01.13"
xmlns:dm="urn:rosettanet:specification:domain:Manufacturing:xsd:schema:01.14" 

自己在xml文件中添加这些名称空间是不可行的,因为会有很多xml文件,而且这些文件每天都会出现。

我是否有可能创建一个文件(例如xsd)并在其中写入名称空间,并使用C#代码中的这个(所谓的)模式文件读取xml文件。

EN

回答 1

Stack Overflow用户

发布于 2019-05-21 09:29:19

您需要使用非xml方法来读取糟糕的xml文件。尝试使用以下代码:

代码语言:javascript
运行
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;

namespace ConsoleApplication3
{
    class Program1
    {
        const string BAD_FILENAME = @"c:\temp\test.xml";
        const string Fixed_FILENAME = @"c:\temp\test1.xml";
        static void Main(string[] args)
        {

            StreamReader reader = new StreamReader(BAD_FILENAME);
            StreamWriter writer = new StreamWriter(Fixed_FILENAME);

            string line = "";
            while ((line = reader.ReadLine()) != null)
            {
                if (line == "<SemiconductorTestDataNotification>")
                {
                    line = line.Replace(">", 
                        " xmlns:ssdh=\"urn:rosettanet:specification:system:StandardDocumentHeader:xsd:schema:01.13\"" +
                        " xmlns:dm=\"urn:rosettanet:specification:domain:Manufacturing:xsd:schema:01.14\"" +
                        " >");
                }
                writer.WriteLine(line);

            }
            reader.Close();
            writer.Flush();
            writer.Close();

            XDocument doc = XDocument.Load(Fixed_FILENAME);
        }
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56231237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档