Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对不同的xml文件属性进行Schematron验证_C#_Xml_Xsd_Xml Validation_Schematron - Fatal编程技术网

C# 如何对不同的xml文件属性进行Schematron验证

C# 如何对不同的xml文件属性进行Schematron验证,c#,xml,xsd,xml-validation,schematron,C#,Xml,Xsd,Xml Validation,Schematron,我有一个source1.xml文件 <?xml version="1.0" encoding="utf-8" ?> <list> <author id="a1">Alice</author> <author id="p1">Paul</author> <author id="p2">Peter</author> </list> 若我们观察两个xml文件,那个么在使用schem

我有一个source1.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<list>
  <author id="a1">Alice</author>
  <author id="p1">Paul</author>
  <author id="p2">Peter</author>
</list>
若我们观察两个xml文件,那个么在使用schematron进行验证时,它应该在前两个id值处给出错误。但是我没有得到任何错误。。
这里有人能帮我吗……

所以你的问题似乎是:如何让C#模式验证器强制执行嵌入XSD模式文档中的Schematron规则?你检查过C#XSD验证器是否支持嵌入式Schematron规则吗?是的,C#XSD验证器支持嵌入式Schematron,我试过了,它在同一个文件中工作正常……jst没有给我任何错误,不同的文件属性验证,如上面的示例所示。若我对同一个文件的属性进行任何验证,那个么它会显示错误。。。对于不同的文件属性,我不确定我提到的xpath是否有任何错误。。
<?xml version="1.0" encoding="utf-8" ?>
<list>
  <author id="1"/>
  <author id="a2"/>
  <author id="p1"/>
</list>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="list">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="author">

          <xs:annotation>
            <xs:appinfo>
              <sch:pattern name ="Compare AdaptiveDisplayDevice Id with DisplayDevice Id" xmlns:sch="http://www.ascc.net/xml/schematron">

                <rule context="author">
                  <report test="document('source1.xml')//author[@id=current()/@id]">
                    Atrribute
                    <name path="document('source1.xml')//author[@id=current()/@id]"/> is forbidden in element
                    <name/>
                  </report>
                </rule>

              </sch:pattern>
            </xs:appinfo>
          </xs:annotation>

          <xs:complexType>
            <xs:attribute name="id" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
using System.Text;
using NMatrix.Schematron;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {

                /* setup schematron validation */
                Validator validator = new Validator();
                validator.AddSchema(@"D:\POC\ConsoleApplication1\ConsoleApplication1\source2.xsd");

                /* run both validators at once */
                validator.Validate(new XmlTextReader(@"D:\POC\ConsoleApplication1\ConsoleApplication1\source2.xml"));

            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

        }
    } 
}