我正在尝试对XML的一个元素应用强制和可选的验证,这取决于其他元素的值。
以下是XSD:
<?xml version="1.0" encoding="utf-8"?>
<root>
<P1Message>
<Hdr>
<I1Agt>
<FinInstnId>
<B1>str1234</B1>
</FinInstnId>
</I1Agt>
<SequenceNum>str1234</SequenceNum>
<SessionNum>str1234</SessionNum>
<MsgTyp>123</MsgTyp>
<IntComment>str1234</IntComment>
</Hdr>
<Inf>
<PmtTpInf>
<LclInstrm>str1234</LclInstrm>
<Svc>
<Cd>str1234</Cd>
</Svc>
</PmtTpInf>
</Inf>
</P1Message>
</root>
下面是XML:
LclInstrm
当MsgTyp
的值为103时,我想强制message.xml is not valid because cvc-assertion.3.13.4.1: Assertion evaluation ('LclInstrm or not(MsgTyp = '103')') for element `Hdr` with type `hdr` did not succeed.
元素。
当我尝试使用Java中的XSD验证上述XML时,我收到以下错误:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main ()
{
pid_t pid;
switch((pid = fork()))
{
case -1:
printf("I'm sorry, fork failed\n");
break;
case 0:
execl("Project1A.c", "./prog", NULL);
printf("EXECL Unsucessfull");
break;
default:
printf("This is some parent code\n");
break;
}
printf("End of Program\n");
return 0;
}
有人可以帮我一下吗?
如果您需要更多详细信息,请与我们联系。
答案 0 :(得分:1)
断言中的XPath是关闭的,因为它假设LclInstrm
和MsgTyp
是兄弟姐妹而不是。
你的断言必须继续使用共同的祖先(P1Message
)并引用每个元素的正确相对路径。
所以,你在P1Message
上的断言将是:
<xs:assert test="Inf/PmtTpInf/LclInstrm or not(Hdr/MsgTyp = '103')"/>
如何使用断言有条件地要求基于另一个元素的值的元素的另一个工作示例可以在这里找到:Require XML element in XSD when another element has certain value?