当前位置: 首页 > 知识库问答 >
问题:

使用XSD进行Delphi XML验证

公冶森
2023-03-14

我正在使用Delphi10.2更新3。我按照这些说明验证生成的xml文档。

属性noNamespaceSchema位置对XML解析有什么影响?

使用Windows DOM和TXMLDocument验证XML:在某些计算机上不起作用

delphi中msxml的模式验证

但我有一个错误。“DTD/架构中未定义元素‘jegyzek\u adatok’上的属性‘noNamespaceSchemaLocation’。”

准备xml文档:

const
  cSchemaLocation = 'noNamespaceSchemaLocation';

procedure PreparePostBookXMLDocument(ARootNode: IXMLNode);
var
  xDoc: IXMLDocument;
begin
  if ARootNode.OwnerDocument = nil then Exit;

  xDoc := ARootNode.OwnerDocument;
  xDoc.Version := '1.0';
  xDoc.Encoding := 'windows-1250';
  xDoc.Options := xDoc.Options + [doNodeAutoIndent];
  ARootNode.Attributes['xmlns:xsi'] := 'http://www.w3.org/2001/XMLSchema-instance';
  ARootNode.Attributes['xsi:' + cSchemaLocation] := 'https://www.posta.hu/static/internet/download/level_ver8_ugyfeleknek_8p4.xsd';
end;

验证:

function ValidatePostBookXMLDocument(ARootNode: IXMLNode): IResult;
var
  xDocument: IXMLDocument;
  xMsxmlDoc: IXMLDOMDocument3;
  xXSDDocument: IXMLDOMDocument3;
  xSchemaCache: IXMLDOMSchemaCollection;
  xSchemaLocation: string;
  xError: IXMLDOMParseError;
begin
  Result := ERRUnknown;
  try
    if ARootNode = nil then Exit;

    xDocument := ARootNode.OwnerDocument;
    if xDocument = nil then Exit;

    xMsxmlDoc := ((xDocument.DOMDocument as IXMLDOMNodeRef).GetXMLDOMNode as IXMLDOMDocument3);

    xSchemaLocation := ARootNode.AttributeNodes.FindNode(cSchemaLocation).Text;
    xXSDDocument := CoDOMDocument60.Create;
    xXSDDocument.async := False;
    xXSDDocument.validateOnParse := True;
    if not xXSDDocument.load(xSchemaLocation) then Exit(MakeErrorResult(ohFileError, 'A validációhoz szükséges séma fájlt nem sikerült betölteni!'));

    xSchemaCache := CoXMLSchemaCache60.Create;
    xSchemaCache.add('', xXSDDocument);
    xMsxmlDoc.schemas := xSchemaCache;
    xError := xMsxmlDoc.validate;
    case xError.errorCode of
      S_OK: Result := Success;
      else Exit(MakeErrorResult(ohError, xError.reason));
    end;
  except
    on E:Exception do Result := HandleException;
  end;
end;

生成的xml文件通过以下方式有效:https://www.freeformatter.com/xml-validator-xsd.html#.

XSD(https://www.posta.hu/static/internet/download/level_ver8_ugyfeleknek_8p4.xsd):

我生成的xml(在我的google驱动器上):

有人能帮我吗?

共有1个答案

魏安然
2023-03-14

我不知道您在Delphi中使用的具体XML解析器。然而,要回答一般性问题:

>

  • 属性xsi: noNamespaceSchema位置声明在哪里可以找到文档的XSD模式(特别是没有命名空间的元素的模式)

    除非调用XSD模式验证,否则它没有任何效果。一些解析器可能会将此属性的存在解释为调用模式验证的信号,但这是相当不寻常的。

    在根据XSD模式进行验证时,如果该属性的值是有效的URI,则该属性始终有效。架构不需要显式允许此属性。

    针对DTD进行验证时,此属性为INVALID,除非写入DTD以显式允许它。

    我怀疑您运行的解析器启用了DTD验证,并且DTD不允许存在此属性。但这有点像猜测。

  •  类似资料:
    • 我是XSD新手,不知道为什么我的XSD没有进行验证。我收到以下错误: s4s-elt-无效-内容.1:“参数信息”的内容无效。元素“复杂类型”无效、放错位置或出现过于频繁。 cvc复合型。2.4。d: 发现以元素“exception”开头的无效内容。此时不需要任何子元素。 XML: XSD: 我错过了什么吗?我想通过使用复杂类型并引用它们来分解它,从而使其更容易...

    • 我正在用XSD验证xml文档。通过使用sax解析器,它成功地验证了。但是当我们使用DOM解析器时,它给出的错误是“Validator class:com.sun.org.apache.xerces.internal.jaxp.validation.validatorImpl org.xml.sax.SAXParseException;CVC-ELT.1:找不到元素“diagram”的声明。“ nu

    • 谁能解释一下如何使用notepad++根据XSD验证xml文件。“XML Tools”插件下拉列表中没有提供指定XSD文件的选项。在plugins子目录中正确安装XML插件,并将3个DLL复制到notepad++EXE子目录。其他XML“验证”特性也可以工作,但无法针对XSD进行验证。

    • 我正在尝试验证Json Objects。我使用https://code.google.com/p/rest-assured/wiki/Downloads?tm=2, greeter-schema.json:http://cs606926.vk.me/v606926718/15603/0Kauo1bTDi8.jpg 即使JsonString不等于这个“{\”isSuccess\“:false}”,我

    • 我的目标是读取CSV文件,将其转换为XML,并根据XSD对其进行验证。代码如下: 错误: 线程“main”组织中出现异常。阿帕奇。骆驼FailedToCreateRouteException:无法在以下位置创建路由1: 此外,我还想配置如果XML对给定的XSD无效,是否会发生异常。我们如何配置它? 请好心帮忙。

    • 为了验证输入字段是否包含数值,我正在使用jQuery的isNumic()方法: 这在大多数情况下都可以正常工作,但以下示例失败了: 如果不是数值,则返回true。 有没有更好的方法在不使用任何其他插件的情况下进行此类验证? 谢谢。