gpt4 book ai didi

javascript - xsd 类型 javascript 的限制

转载 作者:行者123 更新时间:2023-11-28 10:17:28 25 4
gpt4 key购买 nike

我想根据模式验证我的 xml,但是对于某些节点,我想要比 xsd 模式提供的更智能的验证。

例如,我有一个 Person.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<person xmlns="urn:person.xsd">
<name>John Smith</name>
<id>123455</id>
</person>

我想以一种智能的方式验证 ID 节点:前 5 位数字(12345)是该人的 ID,第六位数字(5)是校验和数字,由以下数字之和计算得出:前五位模 10(1+2+3+4+5 模 10 = 5)。

理想情况下,我想扩展 xsd 模式的验证支持,以允许 javascript 等代码验证节点。

例如:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="urn:person.xsd" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="id">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:javascript>
var b= parseInt(input);
var b1= parseInt(b/100000)%10;
var b2= parseInt(b/10000)%10;
var b3= parseInt(b/1000)%10;
var b4= parseInt(b/100)%10;
var b5= parseInt(b/10)%10;
var b6= b%10;

if (b6 == (b1+b2+b3+b4+b5)%10 )
return "true";
else
return "false";
</xs:javascript>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

现在这当然不受支持。我可以将此节点验证为字符串,并在我的源代码中进行进一步验证。但我想要一个通用的解决方案,并且我的代码要排除任何 xml,并且我不想要硬编码的解决方案。

这可能是一个常见问题,但我一直无法找到解决方案。

那么放置额外验证信息的最佳位置在哪里?

或者有没有办法扩展MSXML或.Net的XML验证器以支持自定义验证(我的程序主要是用.Net编写的)?

谢谢

最佳答案

在标准 XSD 中,您可以获得的最接近的是使用 pattern element 。这指定了内容必须符合的正则表达式。

但是,正则表达式仅适用于相当简单的验证,并且无法执行您想要的操作。

一种选择是将脚本添加到 annotation element的类型。这是为“模式组件的针对人类和机器的注释”而设计的。然后,您可以执行此脚本作为第二阶段,从而创建您想要的更通用的解决方案。

由于您使用的是 MSXML,因此您可以使用 SOM 检索 XSD 数据类型。 .

关于javascript - xsd 类型 javascript 的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6277096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com