在显示之前检查Empty XML数据验证

时间:2009-12-27 03:21:39

标签: c# xml xpath

我想在显示之前检查xml。我正在使用XPath而不是xsl。对于例如

<title></title>
<url></url>
<submit></submit>

我想检查一下xml数据是否存在。然后不要显示它。因为我把这些值放在<a href=<%#container.dataitem,url%>>new link</a>. 所以我希望如果url是空的,那么不显示新的链接,否则显示它,类似的标题,如果标题不为空显示它否则不显示它。

主要问题是我可以在ascx.cs文件中查看 if(iterator.current.value="")不显示它,但问题出在ascx文件i givin

<a href="">new link</a>

如果网址为空,我希望不会出现新的链接... 知道怎么检查这个条件吗?

4 个答案:

答案 0 :(得分:0)

使用XPath。假设元素包含在名为link的元素中:

link[title != '' and url !='']

将找到linktitle子元素不包含后代文本节点的url元素。为了使它更具防弹性,

link[normalize-space(title) != '' and normalize-space(url) !='']

将保持表达式与linktitle子项包含空格的url元素匹配。

答案 1 :(得分:0)

如果您无法访问.cs文件,那么您仍然可以将代码直接嵌入.ascx文件中。请记住,您不必将所有代码放在代码隐藏文件中,它可以直接放在.ascx文件中。

<% 
if(iterator.current.value!="") { 
%>
    <a href=<%#container.dataitem,url%>>new link</a>
<% 
}
%>

答案 2 :(得分:0)

我看到过使用asp:Literal控件处理它。

在网络表单中,您有<asp:Literal id='literal' runat='server' text='<%# GetAnchorTag(container.dataitem) %>' />

在后面的代码中,你有:

protected string GetAnchorTag(object dataItem) {
  if(dataItem != null) {
    string url = Convert.ToString(DataBinder.Eval(dataItem, "url"));
    if(!string.IsNullOrEmpty(url)) {
      string anchor = /* build your anchor tag */
      return anchor;
    }
  }
  return string.Empty;
}

这样,您可以输出完整的锚标记或空字符串。我不知道这将如何适合您的标题和提交节点,但它解决了锚点显示问题。

就个人而言,我不喜欢这种做法,但我已经看过很多了。

答案 3 :(得分:0)

//a[not(./@href) or not(text()='']

怎么样?