【发布时间】:2018-04-11 06:55:13
【问题描述】:
我正在尝试编写一个 XPath 验证表达式来检查下面显示的 XML 表单的正确性。我想验证一下:
- 如果是
OperationType = 1,单个User节点中的所有字段都已填充 - 在
OperationType = 2的情况下,各个User节点中的Login字段至少被填充
我想出了以下表达式,但它仅在存在单个 User 节点时才有效:
//wnio:Login!=''
and (//wnio:FirstName!='' or //wnio:OperationType!='1')
and (//wnio:LastName!='' or //wnio:OperationType!='1')
and (//wnio:Email!='' or //wnio:OperationType!='1')
但是,如果这些字段在单独的 User 标记中不为空,则可以肯定地验证文档。
我很想知道是否可以在类似于以下的结构中验证这些条件。对于如何处理此问题的任何建议,我将不胜感激。
<wnio:Document>
<wnio:Content>
<wnio:SubmittedUsers>
<wnio:User>
<wnio:OperationType>1</wnio:OperationType>
<wnio:FirstName>Adam</wnio:FirstName>
<wnio:Login>adamnowak</wnio:Login>
<wnio:Email>adamnowak@example.com</wnio:Email>
<wnio:LastName>Nowak</wnio:LastName>
</wnio:User>
<wnio:User>
<wnio:OperationType>2</wnio:OperationType>
<wnio:FirstName/>
<wnio:Login>testlogin</wnio:Login>
<wnio:Email/>
<wnio:LastName/>
</wnio:User>
<wnio:User>
<wnio:OperationType>1</wnio:OperationType>
<wnio:FirstName>John</wnio:FirstName>
<wnio:Login>johnsmith</wnio:Login>
<wnio:Email>johnsmith@example.com</wnio:Email>
<wnio:LastName>Smith</wnio:LastName>
</wnio:User>
</wnio:SubmittedUsers>
<wnio:AuthorityType>1</wnio:AuthorityType>
</wnio:Content>
</wnio:Document>
【问题讨论】:
-
你有没有尝试过类似的东西:
/wnio:Document/wnio:Content/wnio:SubmittedUsers/wnio:User[(wnio:OperationType = '1' and wnio:FirstName != '' and wnio:Login != '' and wnio:Email != '' and wnio:LastName != '') or (wnio:OperationType = '2' and wnio:Login != '')] -
@GGO - 这工作正常!非常感谢您的帮助!
标签: xml validation xpath