我需要在给定XSD文件的情况下生成WSDL文件.我该怎么做呢?我可以在VS2005中这样做吗?最简单的方法是什么?
我正在用XSD编写XML验证器.
以下是我所做的,但当验证器到达该行时,while (list.Read())它会给我错误
没有Unicode字节顺序标记.无法切换到Unicode.
任何人都可以帮我解决这个问题吗?
public class Validator
{
public void Validate(string xmlString)
{
Boolean bRet = true;
string xmlPath = @"C:\x.xml";
string xsdPath = @"C:\general.xsd";
XmlReaderSettings Settings = new XmlReaderSettings();
Settings.Schemas.Add("", xsdPath);
Settings.ValidationType = ValidationType.Schema;
Settings.ValidationEventHandler +=
new ValidationEventHandler(SettingsValidationEventHandler);
XmlReader list = XmlReader.Create(xmlPath, Settings);
//StringBuilder output = new StringBuilder();
while (list.Read())
{
}
//File.WriteAllText(@"D:\Output.xml", output.ToString());
}
static void SettingsValidationEventHandler(object sender,
ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
MessageBox.Show( "WARNING: ");
MessageBox.Show(e.Message);
}
else if (e.Severity == …Run Code Online (Sandbox Code Playgroud) Visual Studio 2010现在默认以设计模式打开XSD文件.我找不到禁用此选项的任何选项.有没有办法在文本模式下始终打开XSD文件?
我有以下XSD代码:
<xsd:complexType name="questions">
<xsd:sequence>
<xsd:element name="location" type="location"/>
<xsd:element name="multipleChoiceInput" type="multipleChoiceInput" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="textInput" type="textInput" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="pictureInput" type="pictureInput" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)
这里的问题是:元素位置,multipleChoiceInput等必须以它们声明的相同顺序出现.我不希望这种情况发生,我希望在验证过程中序列不应该相关.我怎样才能做到这一点?
我尝试过的另一种可能性是:
<xsd:complexType name="questions">
<xsd:choice maxOccurs="unbounded">
<xsd:element name="location" type="location"/>
<xsd:element name="multipleChoiceInput" type="multipleChoiceInput" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="textInput" type="textInput" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="pictureInput" type="pictureInput" minOccurs="0" maxOccurs="1"/>
</xsd:choice>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)
在这个例子中,序列真的无关紧要,我可以拥有我想要的那么多元素("所有"不允许我做什么).但我仍然遇到min-和maxOccurs的问题.在这个例子中,我可以拥有尽可能多的"pictureInput",但是我希望拥有0或1的约束.
非常感谢您的帮助!
我正在尝试使用xsd验证一个非常简单的xml,但由于某种原因我得到了这个错误.如果有人能解释我为什么,我真的很感激.
XML文件
<?xml version="1.0" encoding="utf-8"?>
<MyElement>A</MyElement>
Run Code Online (Sandbox Code Playgroud)
XSD文件
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/Test"
xmlns:tns="http://www.example.org/Test"
elementFormDefault="qualified">
<simpleType name="MyType">
<restriction base="string"></restriction>
</simpleType>
<element name="MyElement" type="tns:MyType"></element>
</schema>
Run Code Online (Sandbox Code Playgroud) 如何定义可以包含纯文本或包含元素的元素?说我想以某种方式允许这两种情况:
<xs:element name="field">
<xs:complexType>
<xs:sequence>
<xs:element ref="subfield" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="field" type="xs:string" />
Run Code Online (Sandbox Code Playgroud)
......这样这两个元素都是有效的:
<field name="test_field_0">
<subfield>Some text.</subfield>
</field>
<field name="test_field_1">Some more text.</field>
Run Code Online (Sandbox Code Playgroud) 我正在尝试针对许多不同的模式验证XML文件(为人为的例子道歉):
c.xsd特别是导入b.xsd和b.xsd导入a.xsd,使用:
<xs:include schemaLocation="b.xsd"/>
我试图通过Xerces以下列方式执行此操作:
XMLSchemaFactory xmlSchemaFactory = new XMLSchemaFactory();
Schema schema = xmlSchemaFactory.newSchema(new StreamSource[] { new StreamSource(this.getClass().getResourceAsStream("a.xsd"), "a.xsd"),
new StreamSource(this.getClass().getResourceAsStream("b.xsd"), "b.xsd"),
new StreamSource(this.getClass().getResourceAsStream("c.xsd"), "c.xsd")});
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new StringReader(xmlContent)));
Run Code Online (Sandbox Code Playgroud)
但这无法正确导入所有三个模式,导致无法将名称'blah'解析为(n)'组'组件.
我已经使用Python成功验证了这一点,但是在Java 6.0和Xerces 2.8.1中存在实际问题.任何人都可以在这里建议出现问题,或者更简单的方法来验证我的XML文档?
我要来回设置一个元素minOccurs="0"和nillable="true".
我正在阅读这篇文章,现在在我的WSDL中,我不确定使用它们是否值得.本文给出了一个很好的例子来表示你可能在其中散布空值的数组,因为这不能用于完成minOccurs="0".现在,我一直在使用的约定是,如果一个元素不是可选的,那么它就不是可用的.根据我的理解和我的问题所在的区别在于,通过将nillable属性应用于元素,我说你可以传入相当于NULL值的XSD?否则,没有nillable属性的元素必须在限制内放置一个值?
我一直有一些奇怪的问题.主要的一点是,在尝试将WSDL添加到新项目时,我不断收到以下错误:
Error loading [https://.../token?wsdl]: java.lang.Exception: Failed to load url; https://.../token?wsdl, 0 -
Run Code Online (Sandbox Code Playgroud)
这是error.log文件中记录的消息:
java.lang.Exception: Failed to load url; https://.../token?wsdl, 0 -
at com.eviware.soapui.impl.wsdl.support.wsdl.UrlWsdlLoader.load(UrlWsdlLoader.java:184)
at com.eviware.soapui.impl.wsdl.support.wsdl.WsdlLoader.loadXmlObject(WsdlLoader.java:121)
at com.eviware.soapui.impl.wsdl.support.xsd.SchemaUtils.getDefinitionParts(SchemaUtils.java:535)
at com.eviware.soapui.impl.wsdl.support.xsd.SchemaUtils.getDefinitionParts(SchemaUtils.java:524)
at com.eviware.soapui.impl.support.definition.support.AbstractDefinitionCache.update(AbstractDefinitionCache.java:97)
at com.eviware.soapui.impl.support.definition.support.AbstractDefinitionContext$Loader.construct(AbstractDefinitionContext.java:226)
at com.eviware.soapui.support.swing.SwingWorkerDelegator.construct(SwingWorkerDelegator.java:46)
at com.eviware.soapui.support.swing.SwingWorker$2.run(SwingWorker.java:149)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
我验证了该URL上的应用程序已启动并运行,我可以从Web浏览器访问WSDL,但无论如何我都会收到此错误消息.我在Windows 7机器上使用SoapUI 4.5.0(32位).我也尝试了64位版本,结果相同.无论我是否使用VPN,都会发生这种情况.
你知道为什么我会收到这个错误吗?