相关疑难解决方法(0)

除了XHTML自包含标记之外,RegEx匹配开放标记

我需要匹配所有这些开始标记:

<p>
<a href="foo">
Run Code Online (Sandbox Code Playgroud)

但不是这些:

<br />
<hr class="foo" />
Run Code Online (Sandbox Code Playgroud)

我想出了这个,并希望确保我做对了.我只抓住了a-z.

<([a-z]+) *[^/]*?>
Run Code Online (Sandbox Code Playgroud)

我相信它说:

  • 找一个小于,然后
  • 然后,查找(并捕获)az一次或多次
  • 然后找到零个或多个空格
  • 找到任何字符零次或多次,贪婪/,然后
  • 找到一个大于

我有这个权利吗?更重要的是,你怎么看?

html regex xhtml

1323
推荐指数
36
解决办法
270万
查看次数

使用XSD验证XML时忽略提供的命名空间

背景:

我们正在构建一个应用程序,允许我们的客户以预定义(即我们无法控制)的XML格式提供数据.XSD由第三方提供给我们,我们期望在我们处理它之前收到一个传递模式验证的XML文件.

问题:

我们提供的XSD包括默认和目标命名空间,这意味着如果客户提供的XML文件不包含命名空间,则验证将通过.我们显然不希望他们提供说他们通过但不应该提供的东西,但更大的问题是如果我找不到解决办法,我们需要对每个元素进行额外的检查. XML验证.

问题:

是否可以强制.NET执行验证并忽略提供的XML和XSD上的命名空间.即以某种方式"假设"命名空间被附加.

  1. 是否可以轻松,可靠地删除内存中的命名空间?
  2. 在这些情况下,最佳做法是什么?

我到目前为止的解决方案:

  1. 每次更新时都会从XSD中删除命名空间(不应该经常使用.这不会解决这样一个事实,即如果它们提供命名空间,它仍将通过验证.
  2. 从XSD中删除命名空间,并找到一种方法从每次从传入的XML中剥离命名空间.这似乎是很多代码来执行简单的操作.
  3. 在验证之前对XML文件进行一些预先限定以确保它具有正确的命名空间.如果文件的内容正确,则由于名称空间无效而使它们失败似乎是错误的.
  4. 创建一个没有命名空间的重复XSD,但是如果它们只提供错误的命名空间或不同的命名空间,那么它仍然会通过.

示例Xml:

<?xml version="1.0"?>
<xsd:schema version='3.09' elementFormDefault='qualified' attributeFormDefault='unqualified' id='blah' targetNamespace='urn:schemas-blah.com:blahExample' xmlns='urn:blah:blahExample' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
...
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)

与命名空间不同

 <?xml version="1.0" encoding="UTF-8" ?> 
<root xmlns="urn:myCompany.com:blahExample1" attr1="2001-03-03" attr2="google" >
...
</root>
Run Code Online (Sandbox Code Playgroud)

没有命名空间.

 <?xml version="1.0" encoding="UTF-8" ?> 
<root attr1="2001-03-03" attr2="google" >
...
</root>
Run Code Online (Sandbox Code Playgroud)

c# xml xsd-validation

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

如何在XML文件损坏时使用C#进行验证

是否内置任何内容来确定XML文件是否有效.一种方法是读取整个内容并验证字符串是否代表有效的XML内容.即便如此,如何确定字符串是否包含有效的XML数据.

c# xml string validation file

5
推荐指数
2
解决办法
2971
查看次数

如何使用c#检查xml文件是否为空

大家好我想检查我的xml文件是否为空.我正在尝试将一个xml数据更新为另一个为此我使用以下代码.现在请告诉我如何检查我的xml文件是否有数据这是我用来更新我的xml文件的代码

protected void CheckUpdates()
{
    StringReader strReader = new StringReader("..\\xml\\Updatelist.xml");
    XmlReader reader = XmlReader.Create(strReader);
    try
    {
       while (reader.Read())
       {
           var originalXmlDoc = XDocument.Load("..\\xml\\list.xml"); var newXmlDoc = XDocument.Load("..\\xml\\Updatelist.xml");

           foreach (var newElement in newXmlDoc.Element("blocker").Elements("lst"))
           {
               newElement.Value.Trim();
               if (!originalXmlDoc.Element("blocker").Elements("lst")
                       .Any(oldElement => oldElement.Value.Trim().Equals(
                       newElement.Value.Trim(),
                       StringComparison.InvariantCultureIgnoreCase)))
                {
                   originalXmlDoc.Element("blocker").Add(new XElement("lst", newElement.Value));
                }
             }
             originalXmlDoc.Save("..\\xml\\list.xml", SaveOptions.None);

             XmlDocument doc = new XmlDocument();
             doc.Load("..\\xml\\Updatelist.xml");
             doc.DocumentElement.RemoveAll();
             doc.Save("..\\xml\\Updatelist.xml");
          }
       }
    catch (XmlException ex)
    {
       //Catch xml exception
       //in your case: root element is missing
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误

根级别的数据无效.第1行,第1位.

请告诉我如何检查我Updatelist.xml是否空了? …

c# xml

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

标签 统计

c# ×3

xml ×3

file ×1

html ×1

regex ×1

string ×1

validation ×1

xhtml ×1

xsd-validation ×1