所以我有一个像这样的xsd文件。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="DocumentElement">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Item">
<xs:complexType>
<xs:all>
<xs:element name="Text_1" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="2"/>
<xs:maxLength value="25"/>
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Text_2" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="2000"/>
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Company" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="2"/>
<xs:maxLength value="32"/>
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="TaxCode" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="25"/>
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Inherit" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="0|1|true|false|True|False|TRUE|FALSE"/>
<xs:maxLength value="5"/>
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
从那个xsd文件中,我执行这个命令来获取js文件,所以我可以将该元素导出到json文件。
java -jar node_modules/jsonix/lib/jsonix-schema-compiler-full.jar -generateJsonSchema -d mappings -p PTSchema files/
我得到了这个结果。
var PTSchema = {
name: 'PTSchema',
typeInfos: [{
localName: 'DocumentElement.Item',
typeName: null,
propertyInfos: [{
name: 'text1',
required: true,
elementName: {
localPart: 'Text_1'
}
}, {
name: 'text2',
elementName: {
localPart: 'Text_2'
}
}, {
name: 'company',
required: true,
elementName: {
localPart: 'Company'
}
}, {
name: 'taxCode',
elementName: {
localPart: 'TaxCode'
}
}, {
name: 'inherit',
required: true,
elementName: {
localPart: 'Inherit'
}
}]
}, {
localName: 'DocumentElement',
typeName: null,
propertyInfos: [{
name: 'item',
required: true,
collection: true,
elementName: {
localPart: 'Item'
},
typeInfo: '.DocumentElement.Item'
}]
}],
elementInfos: [{
elementName: {
localPart: 'DocumentElement'
},
typeInfo: '.DocumentElement'
}]
};
我只想获得每个元素的限制/数据类型(你怎么称呼它?),以便它出现在那个结果上。
{
name: 'text1',
required: true,
type: string,
minLength: 2,
maxLength: 25,
whiteSpace: 'collapse',
elementName: {
localPart: 'Text_1'
}
}
这可能吗?
我已经看过JSONIX: Get restrictions and default value for properties了 但它没有帮助。
答案 0 :(得分:0)
据我所知,您希望找到该物业的类型。
首先,请阅读Jsonix中的properties。有不同类型的属性。其中一些是单一类型的(如value property或attribute property),有些类型允许不同类型(如elements property)。
无论如何,无论是单类型还是异构,Jsonix映射中的属性定义都使用typeInfo
属性来指定属性的类型(或类型之一)。
请参阅Types。
如果映射中缺少typeInfo
,则该类型默认为String
。
如果typeInfo
以.
开头,它会引用同一映射模块中的其他类型(省略模块名称)。
您可以从映射(仅在JSON文件中)读取所有这些信息。或者,您可以在构建后从Jsonix上下文中访问此信息。
例如,采用此映射:
var GH111 = {
name: "GH111",
dens: "urn:gh111",
typeInfos: [{
localName: "Root",
propertyInfos: [{
name: "value",
type: "elements",
elementTypeInfos: [{
elementName: "a",
typeInfo: "String"
}, {
elementName: "b",
typeInfo: "Integer"
}]
}]
}],
elementInfos: [{
elementName: "root",
typeInfo: ".Root"
}]
};
module.exports.GH111 = GH111;
您可以找到Root.value
属性并检查其中包含的类型:
var context = new Jsonix.Context([GH111], {
namespacePrefixes : {
"urn:test" : ""
}
});
var rootType = context.getTypeInfoByName("GH111.Root");
test.equal('urn:gh111', rootType.getPropertyInfoByName("value").elementTypeInfos[0].elementName.namespaceURI);
test.equal('Integer', rootType.getPropertyInfoByName("value").elementTypeInfos[1].typeInfo.name);