android - 使用 `xmpp` 和 `smack` 从 `vcard` 获取自定义元素
问题描述
vcard
我用自定义元素创建了一个:
<vCard xmlns='vcard-temp'><NICKNAME>nickname</NICKNAME><elementName xmlns='xmlns:custom'><avatar>elementName_avatar_3.png</avatar></elementName></vCard>
但是,当我问这个时vcard
,我的结果是:
<iq xmlns='jabber:client' to='602157@peropenfire101.per.local/3r6td85ng7' from='271087@peropenfire101.per.local' id='jA5pI-33' type='result'><vCard xmlns='vcard-temp'><JABBERID>271087@peropenfire101.per.local/4usgw7j7u</JABBERID><NICKNAME>nickname</NICKNAME></vCard></iq>
如您所见,缺少自定义元素。这是我的要求:
try {
connection.sendStanzaWithResponseCallback(
new cdcd(from),
new StanzaFilter() {
@Override
public boolean accept(Stanza stanza) {
return false;
}
},
new StanzaListener() {
@Override
public void processStanza(Stanza packet) throws SmackException.NotConnectedException, InterruptedException, SmackException.NotLoggedInException {
}
});
} catch (Exception e) {
e.printStackTrace();
}
private class cdcd extends Stanza{
private final Jid from;
public cdcd(Jid from) {
this.from = from;
}
@Override
public String toString() {
return null;
}
@Override
public CharSequence toXML(String enclosingNamespace) {
return "<iq from=\'"+ from +"\' id='v1' type='get'><vCard xmlns='vcard-temp'/></iq>";
}
}
我不知道如何解决这个问题。
解决方案
根据XEP-054,不支持 vCard DTD 的非标准元素的特性,因此您的 XMPP 服务器忽略它们。
不幸的是,Dawson 的提议并未在 IETF 的标准流程中取得进展。由于现在在时间的迷雾中迷失的原因,Jabber 项目继续使用来自 draft-dawson-vcard-xml-dtd-01 的 DTD,进行了两项小的修改以使其适用于 Jabber 社区(添加 JABBERID 和 DESC元素),但也指定所有大写而不是小写的元素名称,如 Draft-dawson-vcard-xml-dtd-01 中定义的那样。此外,Jabber 社区遵循该草案中关于版本信息的用法(但不是 DTD),包括它作为 vCard 元素的属性而不是子元素。这种格式是在 Jabber 社区内的“vcard-temp”命名空间下实现的。
推荐阅读
- django - 如何通过 django 在 postgres 中为日期时间添加分钟
- javascript - 如何在 Edge 中设置滚动行为?
- mysql - MySQL 8 Json 文档合并来自多行的数据
- c# - C# 仅在对象与 bd 的答案不同时才获取该对象
- hadoop - 如何将hadoop中字符串格式的日期时间转换为短日期?
- powerbi - Power BI - 计划刷新 - OData 源 - 匿名
- r - 如何总结 R 中的几个时间步长?
- javascript - 为什么我的状态没有在 useEffect 中更新?
- java - 如何从不同的 Consul 上下文中获取多个 Consul KV?
- java - 如何在 Ubuntu 中更新 java